在下面的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();
});
};
答案 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()来防止异常。