jQuery-difference.remove()与.html(';';)
在下面的示例中.remove()和.html(“”)之间有区别吗? 在哪里可以找到引用的JS代码 HTML 在下面的示例中.remove()和.html(“”)之间有区别吗 没有显著差异,因为在您的示例中,惟一的jQuery-difference.remove()与.html(';';),jquery,html,Jquery,Html,在下面的示例中.remove()和.html(“”)之间有区别吗? 在哪里可以找到引用的JS代码 HTML 在下面的示例中.remove()和.html(“”)之间有区别吗 没有显著差异,因为在您的示例中,惟一的.wrap元素包含惟一的.content元素。由于元素之间的关系,这仅是正确的 在这两种情况下,jQuery都将确保释放.content及其子体(如果有)引用的任何数据和事件处理程序,然后删除相关元素。如果你想知道速度,答案几乎总是它会变化,所以如果它重要的话,就在你的目标浏览器上进行测
.wrap
元素包含惟一的.content
元素。由于元素之间的关系,这仅是正确的
在这两种情况下,jQuery都将确保释放.content
及其子体(如果有)引用的任何数据和事件处理程序,然后删除相关元素。如果你想知道速度,答案几乎总是它会变化,所以如果它重要的话,就在你的目标浏览器上进行测试,但是会涉及到删除节点和设置innerHTML
之间的速度差异(答案让我吃惊)
在哪里可以找到引用的JS代码
在公园里
请回复您的评论:
对于jQuery链接,我当然看过lib,但是我找不到.html()函数的定义位置(sry,我是js新手) 如果您是JavaScript新手,我不建议您尝试理解jQuery源代码,因为它非常复杂,并且使用了很多技巧来减小大小,同时还具有很多实用性
但是我要注意的是,因为在这一点上存在混淆,jQuery的
html
函数并没有只是在所讨论的元素上设置innerHTML
。它的作用远不止于此,它可以防止内存泄漏并释放不再需要的数据。血淋淋的细节目前还存在(当然行号会随着时间的推移而改变),但同样,这是我在JavaScript教育的早期不会涉足的高级内容。是的,在您的示例中两者之间存在差异
强>
如果要删除元素本身以及其中的所有内容,请使用.remove()。因此,在您的例子中,只有
从DOM中删除。它将成为:
<div class="wrap">
... </div></div>
</div>
<div class="wrap"></div>
“基本上”他们是一样的
但实际上(如果你对东西很挑剔的话)这里有区别:
$('.wrap').html('');
console.log( $('body').html() ); // see below
// <div class="wrap"></div>
稍后在该循环中,您可以看到,如果使用innerHTML
的值包含成功,它将设置:elem=0//innerHTML成功!!是的
是的,它使用elem.innerHTML
来分配传递的参数值(如果可能的话)
如果仍然有一个elem
要匹配(innerHTML
是坏的,或者捕捉到错误),它所做的只是:this.empty().append(value)代码>
让我们看看.empty()
方法到底做了什么()
现在是时候看看dang在.remove()
中做了什么了:
在您的测试用例中,它们在功能上是等效的,但这只是因为.wrap
包含一个类.content
@Terry thx的单个子级,当然,我指的是更复杂的情况,我编辑了我的问题.remove()
删除元素,.html(“”)
从元素中删除内容(.html(“”)
有一个分类:.empty()
;)即使在编辑之后,JS的两行在功能上仍然是等效的。对于jQuery链接,我当然看过lib,但找不到.html()函数的定义位置(sry,我是JS新手)
<div class="wrap"></div>
$('.wrap').html('');
console.log( $('body').html() ); // see below
// <div class="wrap"></div>
$('.content').remove();
console.log( $('body').html() ); // see below
// <div class="wrap">
//
// </div>
jQuery.cleanData(getAll(elem, false));
elem.innerHTML = value;
for ( ; (elem = this[i]) != null; i++ ) { // Loops the selectors
if ( elem.nodeType === 1 ) { // If it's an Element node
jQuery.cleanData( getAll( elem, false ) ); // Prevent memory leaks
elem.textContent = ""; // Remove any remaining nodes
// using the native textContent
// which is from jQ v2 I think.
}
}
remove: function (selector, keepData /* Internal Use Only */ ) {
// the .detach() method uses keepData, but not we,
// we're only using .remove() as a bound Method to our selector
// so `elems>>>this` in the code below will be our fella.
var elem,
elems = selector ? jQuery.filter(selector, this) : this,
i = 0;
for (;
(elem = elems[i]) != null; i++) {
if (!keepData && elem.nodeType === 1) { // yes, no keepData!
jQuery.cleanData(getAll(elem)); // remove all data stored
}
if (elem.parentNode) { // Yes, our element has a parentNode
if (keepData && jQuery.contains(elem.ownerDocument, elem)) { //no..
setGlobalEval(getAll(elem, "script")); // not our case...
}
elem.parentNode.removeChild(elem); // jQ data are removed now go with
// the native way of doing things!
}
}
return this; // (maintains Methods chainability...)
}