JS具有数据属性值的属性

JS hasAttribute with data attribute value

本文关键字:属性 数据属性 JS      更新时间:2023-09-26

有没有一种原生方法,没有jQuery,来检查dom元素是否具有具有所选值的属性。例如:

//assume doc has
data-mod="do" defined

这将是真的:

document.hasAttribute('data-mod');

但这将是错误的:

document.hasAttribute('data-mod="do"')

有没有办法在具有值的 DOM 元素上本机检查数据属性?

您必须通过getAttribute访问属性的值,并将其与预期的字符串进行比较:

if (node.getAttribute('data-mod') === 'do') {
    ...
}

对于现代浏览器,您可以使用matches

if (node.matches('[data-mod="do"]')) {
    ...
}

或者对于[data-*]属性,您可以使用dataset

if (node.dataset.mod === 'do') {
    ...
}
你可以

dataset正确地做到这一点,

if (elementNode.dataset['mod'] == 'do') {
    //your code goes here.
}

通过使用dataset您可以轻松访问元素的数据属性。

是的,这里是:

var selector = document.getElementsByTagName("H1")[0]; //Exemple of a h1
if (selector.getAttribute('data-mod') == "do"){
      //Do your logic
}

这可能有效...

var list = document.querySelectorAll('[data-mod="do"]');
你可以

使用Element.attributes

function data(el, dataName, dataValue) {
  for (var i = 0; i < el.attributes.length; i++) {
    if (/^(data)(?=-'w+|=[^=]*$|=$|$)/g.test(el.attributes[i].name)) {
      if (dataName && el.attributes[i].name === "data-" + dataName) {
        if (dataName && dataValue 
            && el.attributes[i].name === "data-" + dataName
            && el.attributes[i].value === dataValue) {
          return true
        }
        return true
      } else {
        return true
      }
    }
  }
  return false
}
var elems = document.querySelectorAll("div");
for (var i = 0; i < elems.length; i++) {
  console.log(data(elems[i]))
}
var _name = "prop", _value = "123";
console.log("element #"
            + elems[1].id 
            +" has `data-*` attribute name:"
            +_name
            +", value:"+_value
            , data(elems[1], _name, _value))
<div data="abc">abc</div>
<div id="prop" data-prop="123">123</div>
<div>no data</div>