有没有办法根据 data-event 属性选择元素?
这是我所拥有的:
<button data-event="5456293788" class="id-button-yes greenBtn list-buy-buttons">Buy now!</button>
寻找类似的东西:
document.getElementByDataEvent('5456293788')
可能的?
有没有办法根据 data-event 属性选择元素?
这是我所拥有的:
<button data-event="5456293788" class="id-button-yes greenBtn list-buy-buttons">Buy now!</button>
寻找类似的东西:
document.getElementByDataEvent('5456293788')
可能的?
使用属性选择器
JS
document.querySelector('button[data-event="5456293788"]' );
CSS
button[data-devent="5456293788"] {
background-color: #eee;
}
在 jQuery 中使用属性等于选择器:
$('[data-event="5456293788"]')
document.querySelectorAll('[data-event="5456293788"]');
为了向后兼容,您必须遍历检查属性值的所有元素。在这种情况下,像 jQuery 这样的库确实有帮助。
向后兼容的原始 js:
function getElementsByAttr(attr, val) {
var nodes,
node,
i,
ret;
val = '' + val;
nodes = document.getElementsByTagName('*');
ret = [];
for (i = 0; i < nodes.length; i += 1) {
node = nodes[i];
if (node.getAttribute(attr) === val) {
ret.push(node);
}
}
return ret;
}
de = getElementsByAttr('data-event', '5456293788');
属性选择器确实浮现在脑海中,您不需要 jQuery 来使用它。
不过,它可能不适用于较旧的浏览器。
如果你真的想要,你可以getElementsByDataEvent
向document
对象添加一个(不确定是否所有浏览器都允许这样做):
document.getElementsByDataEvent = function(dataEvent)
{
return document.querySelectorAll('[data-event="'+dataEvent+'"]');
};
但正如您所看到的,这有点不必要,因为它只是返回querySelectorAll
调用的返回值。更何况,如果querySelectorAll
直接使用,还可以做这样的事情
document.querySelectorAll('a[data-event="foo"]');//only links will be retured
//or, with some other data-* thing, along the lines of:
document.querySelectorAll('[class="greenBtn"]');