これが IE で機能しない理由がわからない場合は、その機能に関する MSDN ドキュメントを次に示します。
getElementsByName メソッドを使用すると、指定された NAME 属性または ID 属性値を持つドキュメント内のすべての要素が返されます。
NAME 属性と ID 属性の両方をサポートする要素は、getElementsByName メソッドによって返されるコレクションに含まれますが、NAME expando を持つ要素はコレクションに含まれません。したがって、このメソッドを使用してカスタム タグを名前で取得することはできません。
Firefox ではgetElementsByName()
、NAME expando を使用する要素を取得できます。これが機能する理由です。それがGood Thing™であるかどうかは議論の余地があるかもしれませんが、それが現実です.
したがって、1 つのオプションは、getAttribute()
DOM メソッドを使用して NAME 属性を要求し、値をテストして目的の値であるかどうかを確認し、必要な場合は配列に追加することです。ただし、これには、ページ内または少なくともサブセクション内のすべてのノードを反復処理する必要があり、これは最も効率的ではありません。getElementsByTagName()
おそらく次のようなものを使用して、そのリストを事前に制約できます。
これを行う別の方法として、ページの HTML を制御している場合は、関心のあるすべての要素に番号のみが異なる Id を与える方法があります。次に例を示します。
<div id="Change0">...</div>
<div id="Change1">...</div>
<div id="Change2">...</div>
<div id="Change3">...</div>
次に、JavaScript を次のようにします。
// assumes consecutive numbering, starting at 0
function getElementsByModifiedId(baseIdentifier) {
var allWantedElements = [];
var idMod = 0;
while(document.getElementById(baseIdentifier + idMod)) { // will stop when it can't find any more
allWantedElements.push(document.getElementById(baseIdentifier + idMod++));
}
return allWantedElements;
}
// call it like so:
var changes = getElementsByModifiedId("Change");
もちろん、これはハックですが、必要な仕事をしてくれるし、他のハックに比べて効率が悪いわけではありません。
なんらかの JavaScript フレームワーク/ツールキットを使用している場合、オプションははるかに優れていますが、使用していることを示さない限り、それらの詳細に入る時間はありません。個人的には、人々がそれなしでどのように生活しているかはわかりません。時間、労力、フラストレーションを大幅に節約できるので、使用しないわけにはいきません。