是否有本机方式,没有JQuery,以检查dom元素是否具有所选值的属性。 例如: //假设doc有data-mod =“do”定义
这将是真的
document.hasAttribute('data-mod');
但这将是假的
document.hasAttribute('data-mod="do"')
有没有办法在DOM元素上本地检查数据属性,值为?
答案 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;