jquery - jQuery/JS ES5 - 查找数据属性的部分名称
问题描述
我在网站上有两种随机注入的横幅的包装器 - 一次一种 - 唯一的区别是一种使用data-abcde-zoneid="10"
而第二种不使用。我必须选择那些不包含data-abcde-zoneid="10"
where abcde
is random string 并用它做一些事情的人。
仅按值搜索或向该元素添加类是不可能的。唯一的解决方案是找到包含-zoneid="10"
或与之相反的元素。我无法为横幅更改注入的 html。
我知道在jQuery 中查找类名或属性值:Finding partial class name并且我尝试使用它们来查找解决方案但没有结果。
解决方案
尽管那里有重复,但它们非常冗长,所以我决定发布一些较短的版本:
您可以过滤 - 如果需要,将 zoneid 和 value 更改为 vars 并包装在一个函数中:
带有 ES6小提琴的 jQuery
$("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小提琴
$("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>
推荐阅读
- amazon-s3 - 有没有办法在恒定时间内在同一存储桶内复制 s3 上的对象 - O(1)
- jenkins - 使用 3GB 内存的 Jenkins 简单安装
- javascript - 为什么我的 Qualtrics Javascript 代码没有运行预期的迭代次数?
- javascript - 通过 JavaScript 将图像添加到 HTML 表格单元格
- c++ - vtkMolecule - 移除原子
- haskell - 如何在 Haskell 中将自然数的范围定义为字符?
- dart - BLoC 状态管理模式(Flutter)
- php - html 形式的动作脚本未正确执行
- google-speech-api - 使用 Google Cloud 文字转语音 API
- javascript - 如果我的javascript中的字符串包含'