Jquery源码分析---DOM元素(下)
2010-09-14 13:36:29 来源:WEB开发网5.3.2 insert
在IE中提供了insertAdjacentElement()方法,这个方法比insertBefore()和appendChild()好用。为了保证兼容性,像prototype,mootools,Ext都提供了一个类似的方法,之后在扩展出四个方法。分别在元素的前面或后面,元素的内部开始或内部结束处四个地方插入元素。
Jquery也一样,提供了domManip(),这个函数和insertAdjacentElement类似,不同的是它采用回调函数做swhere的类似参数,可见它更为灵活。
// Dom manipulate操作的函数,对于每个jQuery对象中元素都运行
// 由callback操作args转化成的Dom 元素集合的函数。
domManip : function(args, table, reverse, callback) {
var clone = this.length > 1, elems; ①
// 对当前的jquery对象中每个元素都进行操作
return this.each(function() {
if (!elems) {// 把args 转化为dom元素数组,追加的内容 ②
elems = jQuery.clean(args, this.ownerDocument);
if (reverse) elems.reverse();// 倒序
}
var obj = this;
// Ie Table不兼容,要进行特殊处理
if (table && jQuery.nodeName(this, "table")// 当前元素是table? ③
&& jQuery.nodeName(elems[0], "tr"))// 要追加是tr?
obj = this.getElementsByTagName("tbody")[0]// 没有tbody,创建追加
|| this.appendChild(this.ownerDocument .createElement("tbody"));
var scripts = jQuery([]);
jQuery.each(elems, function() {//对于参数转化的每一个dom对象 // 长度大于1,就采用clone。取第一个元素,否则就是本元素
var elem = clone ? jQuery(this).clone(true)[0] : this; ④
// 执行所有 scripts 在所有的元素注入之后
if (jQuery.nodeName(elem, "script"))scripts = scripts.add(elem); ⑤
else { // 除去内部 scripts,同时保存起来, 为了之后的计算
if (elem.nodeType == 1)
scripts = scripts.add(jQuery("script", elem).remove());⑥
callback.call(obj, elem); ⑦
}
});
scripts.each(evalScript); ⑧
});
}
};
更多精彩
赞助商链接