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')
可能?
属性セレクターは思い浮かびますが、それを使用するために jQuery は必要ありません。
ただし、古いブラウザでは動作しない可能性があります。
getElementsByDataEvent
本当に必要な場合は、オブジェクトに a を追加でき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"]');
属性セレクターを使用する
JS
document.querySelector('button[data-event="5456293788"]' );
CSS
button[data-devent="5456293788"] {
background-color: #eee;
}
jQuery で属性 equals セレクターを使用します。
$('[data-event="5456293788"]')
またはでdocument.querySelectorAll
:
document.querySelectorAll('[data-event="5456293788"]');
下位互換性のために、属性値をチェックするすべての要素を反復処理する必要があります。これは、jQuery などのライブラリが本当に役立つケースです。
下位互換性のある raw 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');