【问题标题】:Why is the jquery empty function so complicated?为什么jquery空函数这么复杂?
【发布时间】:2012-04-24 20:24:35
【问题描述】:

我查看了jQuery 函数的.empty() 源代码:

empty: function() {
        for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
            // Remove element nodes and prevent memory leaks
            if ( elem.nodeType === 1 ) {
                jQuery.cleanData( elem.getElementsByTagName("*") );
            }

            // Remove any remaining nodes
            while ( elem.firstChild ) {
                elem.removeChild( elem.firstChild );
            }
        }​

innerHTML 改为空字符串不是更简单吗:

empty: function() {
        for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
                elem.innerHTML = "";
        }​

emptydocs:

说明:从 DOM 中删除匹配元素集的所有子节点。

【问题讨论】:

  • 代码中这条注释说明了:// Remove element nodes and prevent memory leaks...
  • @nnnnnn。是的,我实际上是在问它如何导致内存泄漏......

标签: javascript jquery html


【解决方案1】:

想想.data() expandos 和事件处理程序...只要删除 DOM,每次都会造成内存泄漏。

【讨论】:

  • 此外,当与 jQuery UI 结合使用时,它会在元素被删除之前调用使用 $.widget 框架定义的小部件的销毁方法中定义的所有清理方法。
  • +1 用于正确解释内存泄漏。我学得很辛苦
  • @gdoron 在 javascript expando 中的意思是,将附加属性附加到对象。
  • @gdoron:jQuery 提供了.data() 方法,可以在特定节点上存储任何类型的数据。该数据不直接存储在节点上,而是存储在与之链接的特殊容器中。这些数据永远不会与任何事件处理函数或存储在某处的其他数据一起被删除。
  • @jAndy 换句话说,在纯 javascript 中不会存在这个问题,因为数据是 jQuery 的一个特性?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
相关资源
最近更新 更多