1

誰でも jQuery .grep()のこの動作を説明できますか

この要素名から jQuery オブジェクト配列を作成します。

<div class="small1 other">S1</div>
<div class="small2">S2</div>
<div class="small3">S3</div>
<div class="small4 other">S4</div>
<div class="small5">S5</div>
<div class="small6">S6</div>

次に、内部に関数を指定eachして a を実行します。.grep()

なぜconsole.log() が / / などをログに記録し、 1/ 2/3などではなく...small1small2small3

$('div[class^="small"').each(function () {
    var this_class = $(this).prop('class');
    var filter = $.grep(this_class, function (a) {
        return a ^= 'small';
    });
    console.log(filter[0]);
});

フィドル

4

1 に答える 1

3
a ^= 'small'; 

あなたが思うように、演算子が butaで始まるかどうかを示しているわけではありません'small'

a = a ^ 'small'

返す

a ^ 'small'

これは、数値に変換できない場合です0a

あなたがすることは、クラスから文字列として作成された文字の配列をフィルタリングし、数値である最初の文字を返すことです。つまり、結果です。

最初の反復では、フィルタリングは次と同等です

 $.grep(["s", "m", "a", "l", "l", "1"], function(a) { return a ^='somestring' })

返す

 ['1']

「small」で始まるすべてのクラスを取得する場合は、次のようにします。

 $('div[class^="small"').each(function(){
      var filter = $.grep(this.className.split(' '), function(a) {
           return a.indexOf('small')===0;
      });
      console.log(filter);
 });
于 2013-09-01T09:25:32.467 に答える