如何将querySelectorAll仅用于具有特定属性集的元素?

Sor*_*ryn 95 javascript css-selectors selectors-api

我正在尝试使用document.querySelectorAll具有value属性集的所有复选框.

页面上还有其他没有value设置的复选框,每个复选框的值都不同.但是ID和名称并不是唯一的.

例: <input type="checkbox" id="c2" name="c2" value="DE039230952"/>

如何仅选择已设置值的复选框?

Jos*_*eph 183

你可以querySelectorAll()像这样使用:

var test = document.querySelectorAll('input[value][type="checkbox"]:not([value=""])');
Run Code Online (Sandbox Code Playgroud)

这意味着:

获取具有属性"value"的所有输入,并且具有非空白的属性"value".

在此演示中,它使用非空值禁用复选框.

  • 很棒的答案!这大大消除了将jQuery包含在用于DOM遍历的迷你库中的需要.我在下面的答案中有一些额外的提示. (2认同)

mat*_*yer 18

额外提示:

多个"nots",未隐藏且未禁用的输入:

:not([type="hidden"]):not([disabled])
Run Code Online (Sandbox Code Playgroud)

你也知道你可以这样做:

node.parentNode.querySelectorAll('div');
Run Code Online (Sandbox Code Playgroud)

这对jQuery来说是相同的:

$(node).parent().find('div');
Run Code Online (Sandbox Code Playgroud)

这将有效地找到"节点"中的所有div并递归下面,HOT DAMN!


Pun*_*rud 8

以您的示例为例:

<input type="checkbox" id="c2" name="c2" value="DE039230952"/>
Run Code Online (Sandbox Code Playgroud)

在示例中,将$$替换为document.querySelectorAll:

$$('input') //Every input
$$('[id]') //Every element with id
$$('[id="c2"]') //Every element with id="c2"
$$('input,[id]') //Every input + every element with id
$$('input[id]') //Every input including id
$$('input[id="c2"]') //Every input including id="c2"
$$('input#c2') //Every input including id="c2" (same as above)
$$('input#c2[value="DE039230952"]') //Every input including id="c2" and value="DE039230952"
$$('input#c2[value^="DE039"]') //Every input including id="c2" and value has content starting with DE039
$$('input#c2[value$="0952"]') //Every input including id="c2" and value has content ending with 0952
$$('input#c2[value*="39230"]') //Every input including id="c2" and value has content including 39230
Run Code Online (Sandbox Code Playgroud)

将示例直接用于:

const $$ = document.querySelectorAll.bind(document);
Run Code Online (Sandbox Code Playgroud)

一些补充:

$$(.) //The same as $([class])
$$(div > input) //div is parent tag to input
document.querySelector() //equals to $$()[0] or $()
Run Code Online (Sandbox Code Playgroud)