Jquery源码分析---DOM元素(下)
2010-09-14 13:36:29 来源:WEB开发网5.3.3 update
Dom元素提供了replaceChild()。IE还提供了replaceNode(),replaceAdjacentText()方法。而jquery也为其提供了类似的方法:
// 将所有匹配的元素替换成指定的HTML或DOM元素。
replaceWith : function(value) {
return this.after(value).remove();// this.after(value),this没有变
},
replaceWidth是在本对象的所有元素后面加上value元素。然后再把当前对象中的所有元素都去掉。相当于用新的元素代替了原来的元素。Jquery还提供了replaceAll实现把参数中的所有元素都用当前对象的元素来replace,如果当前对象是多个元素,那最终结果当然是最后一个元素。应该为一个元素。replaceAll(elem,[elem].. .. ..)是它的形式。
//用匹配的元素替换掉所有 selector匹配到的元素。
jQuery.each( {replaceAll : "replaceWith"},
function(name, original) {
jQuery.fn[name] = function() {
var args = arguments;// 每个参数和每个元素是对应起来的
// 对当前jQuery中每个元素都进行的操作
return this.each(function() {
for (var i = 0, length = args.length;i < length; i++)
// 调用original代理工作 this是元素
jQuery(args[i])[original](this); });
};
});
5.3.4 remove
对于删除,提供了removeChild()方法,Ie还提供removeNode(true)实现删除本元素及所有的子元素。据说这个函数会出现内存泄漏。Jquery也提供了两个方法来remove元素及释放内存。
jQuery.each( {.. .. ..
remove : function(selector) {// 根据selector除去元素,防内存泄露①
if (!selector || jQuery.filter(selector, [this]).r.length) {②
// Prevent memory leaks this是指dom元素
jQuery("*", this).add([this]).each(function() { ③
jQuery.event.remove(this); ④
jQuery.removeData(this);
});
if (this.parentNode)
this.parentNode.removeChild(this); ⑤
}
},
empty : function() {// 清除元素的所有子节点
// 删除当前对象的每个元素的的所有子节点,防止内存泄漏
jQuery(">*", this).remove(); ⑥
while (this.firstChild)
// 删除余留的子节点
this.removeChild(this.firstChild); ⑦
}
}, function(name, fn) {
jQuery.fn[name] = function() {
return this.each(fn, arguments); ⑧
};
});
更多精彩
赞助商链接