`

关于动态html/dom创建的过程

 
阅读更多

用过jquery的都知道下面这种用法:

 

    make: function(tagName, attributes, content) {
      var el = document.createElement(tagName);
      if (attributes) $(el).attr(attributes);
      if (content) $(el).html(content);
      return el;
    },

 这段代码是backbones.js View对象的方法,就是为了方便创建一个document element,以对象实行返回。

 

我在编程实践中弄了一个自己觉得蛮好用的一个类,对于创建dom对象很方便,尤其是有属性继承情况的。

先贴代码:

/**

* Begin	class defination XHtml : Html Dom生成辅助类
*/
var	XHtml =	Base.extend({
	constructor	: null,	
	dump : '' // 避免,结尾,在IE浏览器中语义错误
	},{

	createFn : function(tag, attr){
		return (function(tagIn, attrIn){
			return function(text, attr){
				attr = attr || {};
				if(attrIn)
					$.extend(attr, attrIn);
				var attrStr = '';
				for(key in attr)
					attrStr += key + '="' + attr[key] + '" ';

				return '<{0} {1}>{2}</{0}>'.format(tagIn, attrStr, text || '');
			}
		})(tag, attr);
	}, 

	input : function(val, attr){
		val	= val || '';
		var	attrStr	= '';
		if(attr){
			for(key	in attr)
				attrStr	+= key + '="' +	attr[key] +	'" ';
		}
		return '<input value="{0}" {1} />'.format(val, attrStr);
	}, 

	sel : function(ll, val, attr, canBlank){
		var	attrStr	= '';
		if(attr){
			for(key	in attr)
				attrStr	+= key + '="' +	attr[key] +	'" ';
		}
		var rr = '<select {0}>'.format(attrStr);

		var tpl = '<option value="{0}" {2} title="{1}">{1}</option>';

		var	defaultLabel = '-请选择-';
		if(canBlank){
			rr += tpl.format('', defaultLabel, '');
		}

		val = val || '';
		var optionStr = $(ll).map(function(){
			return tpl.format(this['code'], this['name'], val == this['code'] ? 'selected' : '');
		}).get().join('');
		return (rr + '{0}</select>').format(optionStr);
	}, 
	
	dump : '' // 避免,结尾,在IE浏览器中语义错误
});

$.extend(XHtml, {
	createInput : function(attr){
		return function(val, attrIn){
			attrIn = attrIn || {};
			if(attr)
				$.extend(attrIn, attr);
			return XHtml.input(val, attrIn);
		};
	}, 

	td : XHtml.createFn('td'),
	tr : XHtml.createFn('tr'),
	alink : function(txt, url, attr){
		var alinkIn = XHtml.createFn('a');
		attr = attr || {};
		attr.href = url;
		return alinkIn(txt, attr);
	},

	trJoin : function(attr){
		var arg = [];
		for (var i = 0; i < arguments.length; i++){
			if(typeof arguments[i] == 'string')
				arg.push(arguments[i]);
		}

		
		return XHtml.tr(arg.join(''), typeof attr == 'string' ? null : attr);
	}
});

$.extend(XHtml, {
	radio: function(name, ll, pender, keyName, keyVal, isFirstChecked, multiple){
		pender = pender || '&nbsp;';
		keyName = keyName || 'name';
		keyVal = keyVal || 'val';

		var fnRadio = XHtml.createInput({type: multiple ? 'checkbox' : 'radio', name: name});
		return _.map(ll, function(item, i){
			if(isFirstChecked && i == 0)
				return fnRadio(item[keyVal], {checked: 'true'}) + pender + item[keyName];
			else
				return fnRadio(item[keyVal]) + pender + item[keyName];
		}).join(pender);
	}
});

 

思路只是简单的拼接字符串,并不是dom对象的创建和操作。

根据具体需求,可以在此基础上再封装一层,业务相关的所为所为控件的视图部分。

还比较好用。

 

比如创建一个table就可以以下面方式:

 

 

with(XHtml){
	var fnTable = createFn('table', {class: 'table1'});
	var tpl = fnTable(
		trJoin(
			td(input('A')), 
			td(radio('testRadio', [{name: '男', val: 'M'}])), 
			td(sel([{name: '男', val: 'M'}], null, {name: 'testSelect'})), 
			td(''))
		);

	$('#wrap').html(tpl);
}

 

很有Groovy HtmlBuilder的feel啊,有些模板引擎(ruby)之类的就是这样风格,其实javascript一样可以做到的

分享到:
评论

相关推荐

    DOM XML教程/DOM参考手册/DOM解析XML

    DOM XML教程对于理解XML文档的结构和动态操作XML数据至关重要,不论你是前端开发者还是后端程序员,都能从中受益。通过学习DOM,你可以更好地实现XML数据的读取、处理和展示,提高应用程序的灵活性和功能。

    网页设计工具手册(包含JS/ASP/CSS/HTML/DOM各种手册)

    网页设计是创建交互式、动态和视觉吸引人的在线内容的过程,涵盖了多个技术领域。这份"网页设计工具手册"集合了JavaScript、ASP、CSS、HTML以及DOM等关键元素的手册,为网页设计师和开发者提供了全面的参考资料。...

    常用web开发手册css2/css3/jquery-api/javascript api/dom/html/j2ee-api/dhtml

    DHTML(动态HTML)是HTML、CSS、JavaScript和DOM的组合,使得网页能够实现动态效果,如鼠标悬停时改变样式、动画等。DHTML_参考手册.chm可能包含了关于如何利用这些技术实现动态交互的指南。 这些手册提供了丰富的...

    DOMParser解析xml

    - HTML解析:虽然DOMParser主要用于XML,但它也可以用来解析HTML字符串,这对于动态生成或修改网页内容非常有用。 7. **其他工具和库**: 在实际开发中,除了DOMParser,还有许多库和框架提供更高级的XML处理功能...

    unigrid添加html5 dom元素.rar

    HTML5 DOM(Document Object Model)是一种编程接口,允许程序和脚本动态更新、添加、删除以及改变HTML和XML文档的结构。在Delphi中,通过TWebBrowser控件,开发者可以与HTML5 DOM进行交互,实现诸如加载HTML文档、...

    手工HTML代码转换为DOM代码

    在JavaScript编程中,DOM(Document Object Model)是HTML和XML文档的一种结构化表示,它将网页内容抽象成一系列节点,允许我们通过JavaScript来操作这些节点,实现动态网页的效果。本篇我们将深入探讨如何将手工...

    HtmlDom.rar_HTML dom_PHP HTMLdom

    文件“HtmlDom.chm”很可能是一个帮助文件,提供了关于PHP HTML DOM操作的详细指南。 PHP HTML DOM的核心是`DOMDocument`类,它是整个文档的根节点,可以用来加载HTML或XML文档。通过`loadHTML()`或`loadHTMLFile()...

    动态创建iframe,并动态添加js执行代码

    动态创建iframe意味着在网页加载后,通过JavaScript代码创建并插入到DOM(文档对象模型)中,而不是在HTML源代码中静态定义。 以下是一个简单的动态创建iframe的例子: ```javascript // 创建iframe元素 var ...

    DOM基础及DOM操作HTML

    在这个过程中,DOM操作是关键,因为它用来定位和更新需要更新的HTML部分。 NetBeans是一个跨平台的集成开发环境(IDE),支持多种编程语言,包括JavaScript。在学习这个课程时,你可能需要了解如何在NetBeans中编写...

    XML DOM 教程

    DOM(文档对象模型)是XML和HTML文档的一种标准表示方式,它提供了一种结构化的接口,允许程序和脚本动态地访问、修改以及更新XML文档。在JavaScript中,DOM是通过内置的DOM API来实现的,使得开发者能够用...

    js表格操作,DOM实现数据动态增删查改

    在JavaScript编程中,DOM(Document Object Model)是用于表示HTML或XML文档的一种树形结构,它允许程序和脚本动态更新、添加、删除和改变元素和属性。在本主题"js表格操作,DOM实现数据动态增删查改"中,我们将深入...

    HTML DOM 参考手册 电子书

    9. **DOM与JavaScript的结合**:DOM是JavaScript与HTML交互的核心,书中会介绍如何使用JavaScript操作DOM,实现动态网页效果,如动画、表单验证、AJAX请求等。 10. **性能优化**:处理大型DOM树时,性能是一个重要...

    基于jquery的关于动态创建DOM元素的问题

    在JavaScript和jQuery的世界里,动态创建DOM元素是常见的需求,特别是在构建交互丰富的Web应用时。然而,不恰当的实现方式可能会导致性能问题和兼容性挑战。让我们深入探讨基于jQuery的动态创建DOM元素的最佳实践。 ...

    Laravel开发-htmldom

    总的来说,Laravel4结合"htmldom"库,为开发者提供了便利的工具来解析和操作HTML文档,这在处理动态生成的内容、网页抓取或者数据提取等场景中非常有用。熟练掌握这一技能,能帮助你更好地应对复杂的Web开发任务。

    dom4j 英文api和htmldom教程下载

    - **教程**:`HTML DOM 教程.CHM`是一个关于HTML DOM的教程,可以帮助开发者理解如何使用DOM来操作HTML页面。 - **应用**:在Web开发中,HTML DOM广泛用于实现动态效果,如添加、删除或修改页面元素,以及响应用户...

    HTML DOM 参考手册

    这个“HTML DOM 参考手册”中的汉化版确保了国内开发者可以更方便地理解和应用DOM技术,无论是在创建动态网页、实现交互效果,还是在进行自动化测试和网页爬虫等方面,DOM都是不可或缺的知识基础。通过深入学习DOM,...

    html dom 底层 javascript

    ### HTML DOM 底层 JavaScript 知识点解析 ...总之,HTML DOM底层JavaScript的深入理解,不仅需要掌握DOM的基本概念和接口,还需要熟悉如何使用JavaScript与DOM进行交互,从而实现网页的动态功能和响应性设计。

    domtoimage使用HTML5canvas从DOM节点生成图像

    1. **DOM(Document Object Model)**:DOM是HTML和XML文档的编程接口,它将文档表示为树形结构,允许程序和脚本动态更新、添加、删除和改变元素和属性。 2. **HTML5 Canvas**:HTML5中的Canvas元素是一个可绘制...

Global site tag (gtag.js) - Google Analytics