1

在下面的 jQuery replaceText 函数中,有人可以向我解释一下该行的remove.length && $(remove).remove();作用吗?我不明白 && 这里的用法。

$.fn.replaceText = function( search, replace, text_only ) {  
  return this.each(function(){  
    var node = this.firstChild,  
      val,  
      new_val,  
      remove = [];  
    if ( node ) {  
      do {  
        if ( node.nodeType === 3 ) {  
          val = node.nodeValue;  
          new_val = val.replace( search, replace );  
          if ( new_val !== val ) {  
            if ( !text_only && /</.test( new_val ) ) {  
              $(node).before( new_val );  
              remove.push( node );  
            } else {  
              node.nodeValue = new_val;  
            }  
          }  
        }  
      } while ( node = node.nextSibling );  
    }  
    remove.length && $(remove).remove();  
  });  
};  
4

5 回答 5

3

由于短路的方式,只有在true-ish$(remove).remove();时才会被remove.length评估。

由于remove被声明为一个数组,所以基本上和下面的一样:

if(remove.length != 0)
   $(remove).remove();
于 2012-05-21T15:51:18.953 回答
1

这里的&&意思是只有在不为 0$(remove).remove()时才会执行。remove.length

这是因为 the&&是一个短路运算符,因此如果它之前的评估为假,它将不会评估它之后的任何内容。

于 2012-05-21T15:53:26.117 回答
1

尽管您对它的作用有一些正确的答案:

if(remove.length) // length is bigger than 0 (in this context)
   $(remove).remove();

我必须说代码很愚蠢,jQuery 知道如何处理空集。
所以当$(remove).length == 0代码$(remove).remove();什么都不做的时候。

您可以简单地使用它而无需if

$(remove).remove();
于 2012-05-21T15:59:23.140 回答
0

它说 :

如果 remove.length 返回 0 以外的值(相当于 false),则删除该元素

于 2012-05-21T15:51:59.877 回答
0

它确保设置了“删除”对象

if(remove.length != 0)

这样它就不会尝试删除不存在的东西。在 jQuery 中,如果对象 $(remove) 不存在,.length 函数将返回 0,这与 javascript 中的 False 一致。

如果它确实存在(remove.length > 0),那么它将使用 .remove() 函数将其删除。命名肯定是模棱两可的。

它基本上是一个内联条件语句,通过在不存在的对象上调用 .remove() 来防止异常。

于 2012-05-21T15:53:37.120 回答