jQuery/JS ES5 - 查找数据属性的部分名称
jQuery/JS ES5 - find partial name of data attribute
我在网站上有两种随机注入的横幅包装纸 - 一次一种 - 唯一的区别是一种使用 data-abcde-zoneid="10"
而第二种不使用。
我必须 select 那些不包含 data-abcde-zoneid="10"
的那些,其中 abcde
是随机字符串并用它做一些事情。
仅按值搜索或向该元素添加 class 是不可能的。
唯一的解决方案是找到包含 -zoneid="10"
或与之相反的元素。
我无法为横幅更改注入 html。
我知道在 中找到了 class 名称或属性值,我尝试使用它们来寻找解决方案,但没有结果。
尽管那里有重复的内容,但它们非常冗长,所以我决定 post 一些较短的版本:
您可以过滤 - 如果需要,将 zoneid 和值更改为 vars 并包装在一个函数中:
jQuery 与 ES6 fiddle
$("div").filter(
(_, div) => (
Array.from(div.attributes).filter( // Array from NamedNodeMap
(item) => item.name.indexOf("zoneid") !== -1 && item.value !== "10")
).length > 0
)
.addClass("red")
.red {
background-color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-xxxxx-zoneid="10">
XXXXXX 10
</div>
<div data-xxxx-something-else="z" data-xxxxx-zoneid="20">
XXXXXX 20
</div>
<div data-yyy-zoneid="10">
yyy 10
</div>
<div data-yyy-zoneid="30">
yyy 30
</div>
jQuery 对于旧版浏览器 fiddle
$("div").filter(function() {
var namedNodeMap = this.attributes;
for (var i = 0; i < namedNodeMap.length; i++) {
var item = namedNodeMap.item(i);
if (item.name.indexOf("zoneid") !== -1 && item.value !== "10") {
return true
}
}
})
.addClass("red")
.red {
background-color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-xxxxx-zoneid="10">
XXXXXX 10
</div>
<div data-xxxx-something-else="z" data-xxxxx-zoneid="20">
XXXXXX 20
</div>
<div data-yyy-zoneid="10">
yyy 10
</div>
<div data-yyy-zoneid="30">
yyy 30
</div>
我在网站上有两种随机注入的横幅包装纸 - 一次一种 - 唯一的区别是一种使用 data-abcde-zoneid="10"
而第二种不使用。
我必须 select 那些不包含 data-abcde-zoneid="10"
的那些,其中 abcde
是随机字符串并用它做一些事情。
仅按值搜索或向该元素添加 class 是不可能的。
唯一的解决方案是找到包含 -zoneid="10"
或与之相反的元素。
我无法为横幅更改注入 html。
我知道在
尽管那里有重复的内容,但它们非常冗长,所以我决定 post 一些较短的版本:
您可以过滤 - 如果需要,将 zoneid 和值更改为 vars 并包装在一个函数中:
jQuery 与 ES6 fiddle
$("div").filter(
(_, div) => (
Array.from(div.attributes).filter( // Array from NamedNodeMap
(item) => item.name.indexOf("zoneid") !== -1 && item.value !== "10")
).length > 0
)
.addClass("red")
.red {
background-color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-xxxxx-zoneid="10">
XXXXXX 10
</div>
<div data-xxxx-something-else="z" data-xxxxx-zoneid="20">
XXXXXX 20
</div>
<div data-yyy-zoneid="10">
yyy 10
</div>
<div data-yyy-zoneid="30">
yyy 30
</div>
jQuery 对于旧版浏览器 fiddle
$("div").filter(function() {
var namedNodeMap = this.attributes;
for (var i = 0; i < namedNodeMap.length; i++) {
var item = namedNodeMap.item(i);
if (item.name.indexOf("zoneid") !== -1 && item.value !== "10") {
return true
}
}
})
.addClass("red")
.red {
background-color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-xxxxx-zoneid="10">
XXXXXX 10
</div>
<div data-xxxx-something-else="z" data-xxxxx-zoneid="20">
XXXXXX 20
</div>
<div data-yyy-zoneid="10">
yyy 10
</div>
<div data-yyy-zoneid="30">
yyy 30
</div>