jQuery包含多个字符串优化

时间:2012-07-05 13:15:15

标签: javascript jquery optimization contains

我正在为数百个类似页面编写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组。

它有效,但看起来多余......

我该如何优化它?

抱歉我的英语不好,谢谢你的回复。

1 个答案:

答案 0 :(得分: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
});

您可以这样做的另一件事是对matches数组进行排序,然后使用比线性搜索更智能的搜索算法(例如binary search)来检测文本是否匹配。