JQuery/JS ES5 - найти частичное имя атрибута данных

У меня есть обертка с двумя случайно введенными типами баннеров на сайте - по одному за раз - разница только в том, что один вид использует data-abcde-zoneid = "10", а второй нет. Мне нужно выбрать те, которые не содержат data-abcde-zoneid = "10", где abcde — случайная строка, и сделать с ней кое-что.

Поиск только по значению или добавление класса к этому элементу невозможны. Единственное решение — найти элемент, который содержит -zoneid = "10" или напротив него. Я не могу изменить введенный html для баннеров.

Я знаю, что нашел имя класса или значение атрибута, как в jQuery: поиск частичного имени класса, и я пытался использовать их для поиска решения, но безрезультатно.

Вы можете просмотреть каждый elements Object.values(element.attributes) для совпадения.

James Coyle 19.02.2019 13:58

@mplungjan Я слепой что ли? :) Я пробовал это, и везде говорят о [attribute$ = "value"] но мне нужно что-то вроде [sth$='attribute = "value" ']...

kruzyk 19.02.2019 14:09

@JamesCoyle - это полезнее :)

kruzyk 19.02.2019 14:10
jsfiddle.net/mplungjan/p2hkyuwj
mplungjan 19.02.2019 14:25

ES6: jsfiddle.net/mplungjan/b36hdq18

mplungjan 19.02.2019 14:43
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
5
133
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя там есть дубликаты, они были очень подробными, поэтому я решил опубликовать несколько более коротких версий:

Вы можете фильтровать - если вам нужно, измените zoneid и значение на vars и оберните функцию:

jQuery с ES6 рабочий пример

$("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>

Другие вопросы по теме