关于replaceText函数

时间:2012-05-21 15:48:11

标签: javascript jquery

在下面的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();  
  });  
};  

5 个答案:

答案 0 :(得分:3)

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

由于remove被声明为数组,因此它基本上与:

相同
if(remove.length != 0)
   $(remove).remove();

答案 1 :(得分:1)

此处的&&表示只有在$(remove).remove()不为0时才会执行remove.length

这是因为&&是一个短路操作符,因此如果它之前的值为false,它将不会评估它之后的内容。

答案 2 :(得分:1)

虽然你对它的作用有了正确的答案:

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

我必须说代码是愚蠢,jQuery知道如何处理空集。
因此,当$(remove).length == 0代码$(remove).remove();无法执行任何操作时。

您可以在没有if的情况下使用它:

$(remove).remove();

答案 3 :(得分:0)

它说:

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

答案 4 :(得分:0)

确保设置“删除”对象

if(remove.length != 0)

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

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

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