JavaScript:使用OR运算符比较单个值与多个值

10

可能重复:
检查变量是否等于值列表
具有多个允许条件的JavaScript if语句

我必须在下拉列表(ul)中点击相同的21个项目(li),其中共有253个项目。

我需要在500多个页面上为同一列表执行此操作,因此我想可以使用JavaScript注入每个ul,循环并单击其中一个是21个项目之一的li。 但似乎我不能这样做:

 if(item[i] === ('aasdf'|'basdf'|'cwefw'|'asdfd'|'trehe'|'ferth'|'erthg'|'erthh'|'ierth'|'jeth'|'kerth'|'lerth'|'merth'|'psdfg'|'gregq'|'rsrgs'|'sress'|'srget'|'sergu'|'sdfgsv'))

有没有一种更加语法简洁的方式来写下面这个丑陋的if语句?

var item = document.getElementById('myDropdownList').getElementsByTagName('li');

for (i=0;i<item.length;i++){

    if(item[i].innerText === 'Argentina' | item[i].innerText === 'Australia' | item[i].innerText === 'Brazil' | item[i].innerText === 'Canada' | item[i].innerText === 'China' | item[i].innerText === 'Colombia' | item[i].innerText === 'France' | item[i].innerText === 'Germany' | item[i].innerText === 'Indonesia' | item[i].innerText === 'India' | item[i].innerText === 'Italy' | item[i].innerText === 'Japan' | item[i].innerText === 'Malaysia' | item[i].innerText === 'Mexico' | item[i].innerText === 'Philippines' | item[i].innerText === 'Russia' | item[i].innerText === 'South Africa' | item[i].innerText === 'Sweden' | item[i].innerText === 'Switzerland' | item[i].innerText === 'United Kingdom' | item[i].innerText === 'USA'){

    item[i].click();

    }

}

你确定需要 click() 它们吗?我相信有更好的选择。 - Bergi
2个回答

11

你可以使用变量和多重比较,但这仍然很冗长:

var text = item[i].innerText;
if (text === 'Argentina' || text === 'Australia' || text === 'Brazil' || text === 'Canada' || text === 'China' || text === 'Colombia' || text === 'France' || text === 'Germany' || text === 'Indonesia' || text === 'India' || text === 'Italy' || text === 'Japan' || text === 'Malaysia' || text === 'Mexico' || text === 'Philippines' || text === 'Russia' || text === 'South Africa' || text === 'Sweden' || text === 'Switzerland' || text === 'United Kingdom' || text === 'USA')

或者你可以使用数组,并检查字符串是否包含在其中。

var matches = ['Argentina','Australia','Brazil','Canada','China','Colombia','France','Germany','Indonesia','India','Italy','Japan','Malaysia','Mexico','Philippines','Russia','South Africa','Sweden','Switzerland','United Kingdom','USA'];
if (~ matches.indexOf(item[i].innerText) …

然而,由于复杂的!= -1比较和旧版IE中缺乏本地indexOf函数,人们倾向于使用正则表达式:

var regex = /Argentina|Australia|Brazil|Canada|China|Colombia|France|Germany|Indonesia|India|Italy|Japan|Malaysia|Mexico|Philippines|Russia|South Africa|Sweden|Switzerland|United Kingdom|USA/
if (regex.test(item[i].innerText)) …

1
这是我第一次看到 ~x 用于 x!==-1。干得好。 - John Dvorak
顺便问一下,你知道“-~+[]”是什么吗? - John Dvorak
听起来像是“1”吗?但我肯定有一个解释的问题... - Bergi
我正在考虑使用~~X(将其称为“circa运算符”)而不是0|X进行整数转换。 - John Dvorak
谢谢,还有这些 ~ 运算符,我现在有更多的研究了 :) - AlecPerkey

5
var options = ['Argentina', 'Australia', 'Brazil', 'Canada', ...];
if (options.indexOf(item[i].innerText) !== -1){
  // item[i] was found in options
}

类似这样?使用 Array.indexOf(除非我误解了问题?如果是这样,请发表评论,我会尽力改进我的回答)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接