jQuery-difference.remove()与.html(';';)

jQuery-difference.remove()与.html(';';),jquery,html,Jquery,Html,在下面的示例中.remove()和.html(“”)之间有区别吗? 在哪里可以找到引用的JS代码 HTML 在下面的示例中.remove()和.html(“”)之间有区别吗 没有显著差异,因为在您的示例中,惟一的.wrap元素包含惟一的.content元素。由于元素之间的关系,这仅是正确的 在这两种情况下,jQuery都将确保释放.content及其子体(如果有)引用的任何数据和事件处理程序,然后删除相关元素。如果你想知道速度,答案几乎总是它会变化,所以如果它重要的话,就在你的目标浏览器上进行测

在下面的示例中.remove()和.html(“”)之间有区别吗? 在哪里可以找到引用的JS代码

HTML

在下面的示例中.remove()和.html(“”)之间有区别吗

没有显著差异,因为在您的示例中,惟一的
.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...)
}