`

关于动态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一样可以做到的

分享到:
评论

相关推荐

    动态创建html内容时所用的W3C DOM属性和方法

    动态创建html内容时所用的W3C DOM属性和方法

    通过JS动态创建一个html DOM元素并显示

    近日,因工作需要,需要通过点击某个元素后, 动态创建一个DOM元素并显示,因此写了一些相关的JS函数,在此记录,以作备忘: /**//* 动态创建DOM元素的相关函数支持 www.jcodecraeer.com */ /**//* 获取以某个元素...

    JavaScript与DOM组合动态创建表格实例

    它使用DOM 1的方法由JavaScript动态创建一个HTML表格。它创建一个由四个包含文本内容的单元格组成的小表格。单元格的文字内容是:“单元格是第y行第x列”,表示单元格在表格中的行数和列数。 代码如下:&lt;ht

    vue动态生成dom并且自动绑定事件

    用jquery的时候你会发现,页面渲染后动态生成的dom,在生成之前的代码是没办法取到相应对象的,必须重新获取.但是vue基于数据绑定的特性让它能生成的时候直接绑定数据。 html: &lt;input type=text v-model...

    利用DOM技术对XML文档进行访问与操作

    [实验目的]: 理解应用程序访问与操作XML文档的过程; 掌握用DOM创建XML文档的步骤; 掌握DOM常用类的使用方法 [实验内容] 利用DOM创建如下结构的XML文档(文件名定为:new.xml)

    javascript Dom 编程艺术

    读者将看到JavaScript、 HTML5和CSS如何协作来创建易用的、与标准兼容的Web设计,掌握使用JavaScript和DOM通过客户端动态效果和用户控制的动画来加强 Web页面的必备技术;同时,还将对如何利用库提高开发效率有全面...

    动态创建夜空小星星的过程.rar

    用 html + css + Javascript 实现动态元素的创建; 实现在夜空中定时添加小星星的操作; 且小星星的大小是在设定的范围内随机的大小;

    JQuery创建DOM节点的方法

    在DOM操作中,常常需要动态创建HTML内容,使文档在浏览器里的呈现效果发生变化,并且达到各种各样的人机交互的目的。 HTML DOM结构如下: 欢迎访问软件开发网&gt;欢迎访问软件开发网&lt;/p&gt; 简单易懂的PHP编程&lt;/li&gt;

    javascript实现dom动态创建省市纵向列表菜单的方法

    本文实例讲述了javascript实现dom动态创建省市纵向列表菜单的方法。分享给大家供大家参考。具体实现方法如下: &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part1.rar

     3.3.1 创建DOM文件   3.3.2 选择一个浏览器  3.4 DOM核心   3.4.1 继承在DOM中的重要性   3.4.2 核心Node对象   3.4.3 核心Element对象   3.4.4 核心Document对象   3.4.5 遍历和迭代DOM树 ...

    javascript元素动态创建实现方法

    [removed]只能在页面加载过程中才能动态创建 可以调用document的createElement方法来创建具有指定标签的DOM对象,然后通过调用元素的appendChild方法将 新创建元素添加到相应的元素下 举例如下: &lt;html xmlns=...

    JavaScript HTML DOM

    通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。 JavaScript 能够改变页面中的所有 HTML 元素 JavaScript 能够改变页面中的所有 HTML 属性 JavaScript 能够改变页面中的所有 CSS 样式 Ja

    vue 使用html2canvas将DOM转化为图片的方法

    主要介绍了vue 使用html2canvas将DOM转化为图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    动态DOM元素过滤Tagsort.zip

    Tagsort 利用 HTML5 属性创建可以用于过滤器和排序的、动态的、交互的标记元素。 标签:Tagsort

    week-5-dom-and-html-Ridanna:GitHub Classroom创建的week-5-dom-and-html-Ridanna

    第五周-Dom Html 我们已经看到了如何在html中选择元素,以及如何更改/创建/删除这些元素或它们CSS属性。 现在,我们将练习这些技能,这些技能是构建交互式网站的基础,并了解如何使用JS来动态修改网站/文件其他部分...

    JavaScript DOM编程艺术(源码)

    读者将看到JavaScript、HTML5和CSS如何协作来创建易用的、与标准兼容的Web设计,掌握使用JavaScript和DOM通过客户端动态效果和用户控制的动画来加强Web页面的必备技术;同时,还将对如何利用库提高开发效率有全面...

    javascript动态创建及删除元素的方法

    本文实例讲述了javascript动态创建及删除元素的方法。分享给大家供大家参考。具体分析如下: 在DOM中我们可以方便快速的动态删除与删除dom元素,这里我们就来给各位朋友简单的介绍一下。 例1: 动态创建一个按钮 ...

    windwalker-dom:[只读]一个php虚拟DOM库,可帮助我们动态构建DOM字符串

    风行者大教堂 通过Composer安装 将此添加到composer.json的require块中... DomElement和DomElements用于创建XML元素。 use Windwalker \ Dom \ DomElement ; $ attrs = array ( 'id' =&gt; 'foo' , 'class' =&gt; 'bar' ); e

Global site tag (gtag.js) - Google Analytics