ホームページ >ウェブフロントエンド >jsチュートリアル >IEはgetElementsByClassNameをサポートしていません 最終的な完璧な解決策_基礎知識

IEはgetElementsByClassNameをサポートしていません 最終的な完璧な解決策_基礎知識

WBOY
WBOYオリジナル
2016-05-16 17:46:301085ブラウズ

現在の解決策は、ブラウザーがこのメソッドをサポートしているかどうかを判断することです。サポートしていない場合は、そのままにしておきます。この方法には、メソッドを追加しないという利点があります。ネイティブ関数があるかどうかに関係なく、コードを変更する必要があります。

通常、getElementsByTagName("*") を使用してドキュメント内のすべての要素を取得し、トラバースし、正規表現を使用して一致する要素を見つけ、それらを配列に入れて返します。 IE5 は document.getElementsByTagName("*") をサポートしていないため、エラーを防ぐために document.all ブランチを使用してください

次のメソッドはドキュメントの作成を完全にサポートします

コードをコピー コードは次のとおりです:

if (!document.getElementsByClassName){
document.getElementsByClassName = function(className, element){
var Children = (element || document).getElementsByTagName('*');
var elements = new Array( );
for (var i=0; ivar child = Children[i];
var classNames = child.className.split(' ');
for (var j=0; jif (classNames[j] == className){
elements.push(child); >}
}
}
要素を返します;
}


最終的な解決策は次のとおりです:


コードをコピー コードは次のとおりです:var getElementsByClassName = function (searchClass, node,tag) {
if(document.getElementsByClassName ){
var ノード = (ノード || ドキュメント).getElementsByClassName(searchClass),result = [];
for(var i=0 ;node = ノード[i ];){
if (tag !== "* " && node.tagName === tag.toUpperCase()){
result.push(node)
}else{
result.push(node)
}
}
結果を返します
}else{
node = ノード || ドキュメント;
tag = タグ "*"; 、
要素 = (タグ === "*" && ノード.all)? ノード.getElementsByTagName(タグ)、
パターン = []、
現在の、
一致; 🎜>var i = クラスの長さ;
while(--i >= 0){
patterns.push(new RegExp("(^|s)" クラス[i] "(s|$) "));
}
var j = elements.length;
while(--j >= 0){
current = elements[j];
match = false;
for(var k= 0, kl=patterns.length; kmatch = pattern[k].test(current.className);
if (!match) Break; 🎜>}
if (一致) result.push(current);
}
結果を返す
}
}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。