jQuery / JS ES5 - 查找数据属性的部分名称

问题描述 投票:0回答:1

我有两个随机注入的横幅在现场包装 - 一个在时间 - 唯一的区别是一种使用data-abcde-zoneid="10"而第二种不是。我必须选择那些不包含data-abcde-zoneid="10"的地方,其中abcde是随机字符串并用它做一些事情。

不能仅通过值搜索或向该元素添加类。唯一的解决方案是找到包含-zoneid="10"或与之相反的元素。我无法更改横幅注入的html。

我知道在jQuery: Finding partial class name中找到类名或属性值,我尝试使用它们来找到解决方案但没有结果。

jquery jquery-selectors ecmascript-5
1个回答
0
投票

虽然有重复,但它们非常详细,所以我决定发布一些较短的版本:

您可以过滤 - 如果需要,将zoneid和value更改为vars并包装在函数中:

与ES6 fiddle的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 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>
© www.soinside.com 2019 - 2024. All rights reserved.