Javascript jQuery包含多个字符串优化

Javascript jQuery包含多个字符串优化,javascript,jquery,optimization,contains,Javascript,Jquery,Optimization,Contains,我正在为数百页类似的页面编写一个Greasemonkey脚本 如果AA或AB或AC…等单位为美元(“续>h2”),则想做点什么 所以我试着: var 1stgroup = new Array(40) 1stgroup [0] = $("#cont > h2:contains('AA')") 1stgroup [1] = $("#cont > h2:contains('AB')") 1stgroup [2] = $("#cont > h2:contains('AC')") ...

我正在为数百页类似的页面编写一个Greasemonkey脚本

如果AA或AB或AC…等单位为美元(“续>h2”),则想做点什么

所以我试着:

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
    };
};
var 1stgroup=新数组(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'))
对于(i=0;i<40;i++){
if(1stgroup.text()){
//在这里做点什么
};
};
组2~7

它可以工作,但看起来多余

我如何优化它

对不起,我的英语很差,谢谢你的回复。

  • 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
});
var匹配=['AA','AB','AC'];
$('#cont>h2')。筛选器(函数(){
var text=$(this.text();
对于(var i=0;i
  • 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
});
var匹配=['AA','AB','AC'];
$('#cont>h2')。筛选器(函数(){
var text=$(this.text();

对于(var i=0;iIs,组的数量有限制吗?
ZZ
GDQ
是否可能?另外,
#cont>h2
中的文本示例是什么?我将从缓存选择器开始。
[]
而不是
新数组()
并确保您没有任何像
i
这样的全局变量,只要
var i=0
…AA到ZZ仅代表一些名称,我使用这些名称是为了保护个人隐私,在
#cont>h2中有
@user1503972您提前知道这些名称吗?@hookdonwinter是的,我已经知道了它们有限制吗组数?可能是
ZZ
GDQ
吗?还有,
#cont>h2
中的文本示例是什么?我首先缓存选择器。
[]
而不是
新数组()
并确保您没有任何类似于
i
,只是
var i=0
…AA到ZZ仅代表某些名称,我使用这些名称是为了保护个人隐私,在
#cont>h2中有
@user1503972您提前知道这些名称吗?@hookdonwinter是的,我已经知道它们的工作原理了很多年5页,我将为所有其他页面工作,而不是报告,谢谢一个对两个组很好的lotworks,但我发现了一个新问题:例如,有两个人,一个叫哈里·波特,他在组1中。另一个叫哈里·波特,他在组2中。哈里·波特小的页面设置为组2,但哈里·波特的页面具有两个组1设置ng&group2设置,我该如何处理它?适用于5页,我将适用于所有其他页,而不是报告,感谢一个对2组很好的lotworks,但我发现了一个新问题:例如,有两个人,一个人的名字是Harry Porter,他在group1中。另一个人的名字是Harry Porter Jr,他在group2中。Harry Porter Jr与g的页面组2设置是可以的,但Harry Porter的页面既有组1设置又有组2设置,我该如何处理?