JS和querySelectorAll

mar*_*rio 1 javascript

一个querySelectorAll问题,很可能是一个愚蠢的问题,但我没有看到解决方案.

我有类似以下内容

<div id="main_0"> ... </div>
<div id="main_1"> ... </div>
<div id="main_1_minor"> ... </div>
<div id="main_2"> ... </div>
<div id="main_2_minor"> ... </div>
              .
              .
Run Code Online (Sandbox Code Playgroud)

我希望选择所有且只有那些没有的div minor.

我试过了

var pattern = new RegExp('^main_\\d');
var elSelected = document.querySelectorAll('div[id^=main_]');
elSelected.filter(elt => pattern.test(elt.id)));
Run Code Online (Sandbox Code Playgroud)

但显然这还不够.我不知道如何通过RegEx制定id值必须以数字终止.我尝试了类似的东西,RegExp('^main_\\d$');但我没有做对.

小智 6

您可以将:not()选择器与"属性结束"选择器一起使用.

"div:not([id$=minor])"
Run Code Online (Sandbox Code Playgroud)

如果它还应该验证id开头main_,那么您也可以在问题中显示它.

"div[id^=main_]:not([id$=minor])"
Run Code Online (Sandbox Code Playgroud)

所以这说"选择所有divid开头main_为止但不以...结尾的元素minor".

如果minor不一定在最后,那么你可以使用id*=minor"包含"代替.

document.querySelectorAll("div[id^=main_]:not([id$=minor])")
  .forEach(el => el.style.color = "red");
Run Code Online (Sandbox Code Playgroud)
<div id="main_0"> main </div>
<div id="main_1"> main </div>
<div id="main_1_minor"> main ends with minor </div>
<div id="main_2"> main </div>
<div id="main_2_minor"> main ends with minor </div>
Run Code Online (Sandbox Code Playgroud)