0

何百もの同様のページの Greasemonkey スクリプトを作成しています。

$("#cont > h2") で AA または AB または AC などの場合に何かをしたい

だから私は試しました:

var 1stgroup = new Array(40)
1stgroup [0] = $("#cont > h2:contains('AA')")
1stgroup [1] = $("#cont > h2:contains('AB')")
1stgroup [2] = $("#cont > h2:contains('AC')")
...
1stgroup [39] = $("#cont > h2:contains('BN')")

for (i =0; i < 40 ; i++) {
    if (1stgroup.text())       {
    //do something here
    };
};

そしてグループ2~7より。

動作しますが、冗長に見えます...

どうすれば最適化できますか?

下手な英語で申し訳ありません。すべての返信に感謝します。

4

1 に答える 1

4
  • DOM トラバーサルは JavaScript で最も遅い部分であるため、DOM をトラバースする回数をできるだけ少なくすることが理にかなっています。
  • :contains()は Sizzle 拡張機能であり、CSS3 の一部ではないため、ブラウザーによって最適化されません。遅くなります。

これを念頭に置いて、私は次のようにします。

var matches = ['AA', 'AB', 'AC'];

$('#cont > h2').filter(function () {
    var text = $(this).text();

    for (var i=0;i<matches.length;i++) {
        if (text.indexOf(matches[i]) !== -1) {
            return true;
        }
    }

    return false;
}).each(function () {
    // do something with each of these
});

もう 1 つの方法は、matches配列を並べ替えてから、線形検索よりもスマートな検索アルゴリズム (バイナリ検索など) を使用して、テキストが一致するかどうかを検出することです。

于 2012-07-05T13:22:16.270 に答える