JS hasAttribute具有数据属性值

时间:2016-03-04 21:32:26

标签: javascript jquery

是否有本机方式,没有JQuery,以检查dom元素是否具有所选值的属性。 例如: //假设doc有data-mod =“do”定义

这将是真的

document.hasAttribute('data-mod');

但这将是假的

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

有没有办法在DOM元素上本地检查数据属性,值为?

5 个答案:

答案 0 :(得分:4)

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

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

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

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

...或[data-*]属性,您可以使用dataset

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

答案 1 :(得分:3)

您可以使用dataset

正确完成此操作
if (elementNode.dataset['mod'] == 'do') {
    //your code goes here.
}

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

答案 2 :(得分:0)

是的,这就是:

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

答案 3 :(得分:0)

这可能有用......

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

答案 4 :(得分:0)

您可以使用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))
&#13;
<div data="abc">abc</div>
<div id="prop" data-prop="123">123</div>
<div>no data</div>
&#13;
&#13;
&#13;