それgetElementsByClassName
が目的です:
document.getElementsByClassName('hello');
これにより、 class を持つすべての要素が選択されますhello
。
注:class
属性には、スペースで区切られたクラス名のリストが含まれます。
IE8 以下をサポートする必要がある場合は、これを使用します。
var elements = document.getElementsByTagName("td"),
helloElements = [],
i = elements.length;
for (i--) {
if ( ~(' ' + elements[i].className + ' ').indexOf(' hello ') ) {
helloElements.push(elements[i]);
}
}
ここにデモがあります: http://jsfiddle.net/AJEsp/
@mplungjan の提案に従って、ビット単位のチルダ (~) トリックの簡単な説明を次に示します。
このindexOf
関数は、見つかった部分文字列の位置を含む整数を返すため、'abc'.indexOf('b')
が返さ1
れ、'abc'.indexOf('c')
が返さ2
れます。部分文字列が見つからない場合は、 が返され-1
ます。
~
文字は、すべてのビットを反転するビット演算子の1つです。これが正確にどのように発生するかという複雑な問題を回避するために、今知っておく必要があるのは、 が~-1
返されることだけです。一方、他0
のものにチルダを使用すると、真の値が返されます。
そのため~'str'.indexOf('substring')
、部分文字列が見つかったかどうかのブール値として扱うことができます。