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

あなたはそれが何をするかについていくつかの正しい答えを得ましたが:

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 に答える
1

&&here は、 が 0 でない場合にのみ実行されることを意味します$(remove).remove()remove.length

これは、&&が短絡演算子であるため、その前にあるものが false と評価される場合、その後に続くものは評価されないためです。

于 2012-05-21T15:53:26.117 に答える
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 に答える