我的项目使用纯JavaScript。我想选择没有数据的元素 - 某些属性的值为' abcd'。 我尝试了以下内容。
:not([data-some="abcd"])
此选择器仅返回没有[data-some]的元素。但我想只选择没有数据属性的元素作为' abcd'。它可以有[data-some =" gtf"]。
非常感谢任何帮助。
注意:我只粘贴了选择器,因为我只需要它们。大多数stackoverflow问题都有选择没有特定数据属性的元素的答案。
答案 0 :(得分:1)
var test = document.querySelectorAll(':not([data-some="abcd"])');
for (var i in test) if (test.hasOwnProperty(i)) {
(test[i].style.background = "#DCDCDC");
}

p, h1{
background: #ff7f7f;
}

<div >
<h1 data-some="abcd">hello</h1>
<p data-some="abcd">hello</p>
<p data-some="gtf">hello</p>
</div>
&#13;
答案 1 :(得分:1)
您可以使用单个但相当复杂的选择器:
[data-some]:not([data-some="abcd"])
请注意兼容性,根据您需要支持的主机,您可能需要更简单的选择器和一些脚本。
E.g。
[data-some]:not([data-some="abcd"]) {
background-color: #ffff66;
}
&#13;
<p data-some="abcd">data-some="abcd"</p>
<p data-some="zzz">data-some="zzz"</p>
<p data-some="">data-some=""</p>
<p>no data-some attribute</p>
&#13;
答案 2 :(得分:0)
获取具有data-some
属性的所有元素,但值为"abcd"
$("div[data-some]").not("div[data-some!='abcd']");
答案 3 :(得分:0)
此解决方案是可行的,如果您可以使用Array.prototype.filter
:
const elements = document.querySelectorAll("[data-some]");
const result = Array.from(elements).filter(el => el.dataset.some !== "abcd");
console.log(result);
<div data-some="abcd"></div>
<div data-some="gtf"></div>
<div data-some="ooo"></div>
它使用data-some
属性抓取每个元素,创建一个元素数组,并过滤掉那些不符合条件el.dataset.some !== "abcd"
的元素。