Jquery源码分析---DOM元素(中)
2010-09-14 13:36:33 来源:WEB开发网Jquery也提供了通用的类似的方法。
5.3.1 create
在使用insert,update之前都必须要有元素,这个新增加的元素从那里来呢,就是得创建,document提供了createElement来创建一个元素。别外一种方式就是clone。对原来的元素进行clone。Dom元素提供了cloneNode的方法。
Jquery也提供了类似的方法,jQuery.clean就是完成元素从HTMLstring的到Dom对象的创建。这个方法比document. createElement()提供了更好的兼容和更强大的功能。在3.1中已经介绍。
对于cloneNode,jquery的提供了类似方法如下:
// clone当前对象,events表明是否clone事件
clone : function(events) {
// 对每个元素都进行加工(copy)后的集合重新构建jQuery对象
var ret = this.map(function() {
if (jQuery.browser.msie && !jQuery.isXMLDoc(this)) {
// IE 中cloneNode不能copy 通过attachEvent增加的事件
// 而innserHTML不能copy一些修改过的属性(仅作为属性储存)如input 的name
var clone = this.cloneNode(true),
container = document.createElement("div");
container.appendChild(clone);
return jQuery.clean([container.innerHTML])[0];
}
else return this.cloneNode(true);
});
//需要把元素的扩展属性expando设为null.removeData在这里不起作用。
var clone = ret.find("*").andSelf().each(function() {
if (this[expando] != undefined)
this[expando] = null;
});
if (events === true)// clone所有事件
this.find("*").andSelf().each(function(i) {
if (this.nodeType == 3) return;
var events = jQuery.data(this, "events");
for (var type in events)//为新元素增加clone的事件
for (var handler in events[type])
jQuery.event.add(clone[i], type,
events[type][handler],events[type][handler].data);
});
return ret;
},
Clone提供了对于jquery对象的clone,在上面的代码中可以看出不光是clone了元素的本身,还为clone的元素clone了事件。
文章来源:http://jljlpch.javaeye.com/category/37744
赞助商链接