2

I apologize if this is a duplicate question. It's such a use-case question that it seems everyone has their own version.

I'm wondering if this can be simplified:

if ($('.taxclass').text().indexOf(tax1)>-1 || $('.taxclass').text().indexOf(tax2)>-1) {}
4

6 回答 6

4

就目前而言,它非常简单,但是您可以主要通过仅获取元素文本一次并重用变量来减少冗余:

var text = $('.taxclass').text();
if (text.indexOf(tax1)>-1 || text.indexOf(tax2)>-1) {

}

进一步的注意事项可能是通过使用标识符来减少 DOM 的遍历,并且只寻找一个不同的元素(如果这适合您的需要)而不是所有可能的具有 class 的东西taxclass

于 2013-02-26T16:33:28.783 回答
3

您可以存储$('.taxclass').text()在变量中,或使用正则表达式。

var str = $('.taxclass').text();

if (str.indexOf(tax1) > -1 || str.indexOf(tax2) > -1)

// Or with regex
if(/(text1)|(text2)/.test($('.taxclass').text())
{}
于 2013-02-26T16:32:52.460 回答
3
var txt = $('.taxclass').text();
if (txt.indexOf(tax1)>-1 || txt.indexOf(tax2)>-1) {}
于 2013-02-26T16:33:36.047 回答
3

一种超级快速的方法是不要复制 $('.taxclass').text()

尝试类似的东西

var tax = $('.taxclass').text();
if (tax.indexOf(tax1)>-1 || tax.indexOf(tax2)>-1) {}
于 2013-02-26T16:33:58.730 回答
1

又快又脏:

text.indexOf(tax1+"~"+tax2)>-1

函数式,适用于n 个字符串,但很冗长:

[tax1, tax2].some(function(s) { return s.indexOf(text)>-1 })

作为原型:

String.prototype.foundIn = function() {
    var s=this; return Array.prototype.slice.call(arguments).some(function(m)
       {return m.indexOf(s)>-1});
};

用法:

$('.taxclass').text().foundIn(tax1, tax2)
于 2013-02-26T16:37:07.660 回答
0

关于什么:

f = function (x) { return $('.taxclass').text().indexOf(x) > -1; }
if (f(tax1) || f(tax2)) {}
于 2013-02-26T16:35:15.037 回答