ホームページ >ウェブフロントエンド >jsチュートリアル >IE_javascriptスキルでgetElementsByClassNameが使用できない問題の解決方法

IE_javascriptスキルでgetElementsByClassNameが使用できない問題の解決方法

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

今日、getElementsByClassName を使用して小さなプログラムを作成しました。これをテストすることに興奮しています。FF や Google などの主流のブラウザでは問題なく動作します。ただし、IE6 および 8 でテストすると問題が発生します。ブラウザがエラーを報告しました。コードに悩んだ結果、問題なさそうなのでDu Niangを探すことにしました。 。 。ようやく問題を発見しましたが、getElementsByClassName メソッドは IE6 および 8 ではサポートされていないことがわかりました。そこでインターネットで解決策を探したところ、外国人が書いたもので、2005年に問題になっていることが分かりました。 。 。まずコードを入力します:

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

*
Robert Nyman 氏による開発、http://www.robertnyman.com
コード/ライセンス: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = function (className 、タグ、elm) {
if (document.getElementsByClassName) {
getElementsByClassName = function (className, タグ, elm) {
elm = elm || var elements = elm.getElementsByClassName( className),
nodeName = (tag)? new RegExp("\b" tag "\b", "i") : null,
returnElements = [],
for( var i=0, il=elements.length; icurrent = elements[i];
if(!nodeName || nodeName.test(current.nodeName); 🎜>returnElements.push (現在の);
}
}
return
};
}
else if (document.evaluate) {
getElementsByClassName = function ( className, タグ, elm ) {
tag = タグ || "*";
var クラス = className.split(" "),
classesToCheck = " 、
xhtmlNamespace = "http://www.w3.org/1999/xhtml"、
namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) : null、
returnElements = [] ,
要素 ,
ノード;
for(var j=0, jl=classes.length; jclassesToCheck = "[contains(concat(' ', @class, ' ' ), ' "classes[j] " ')]";
}
try {
elements = document.evaluate(".//" tagclassesToCheck, elm, namespaceResolver, 0 , null);
}
catch (e) {
elements = document.evaluate(".//" タグ classToCheck, elm, null, 0, null); ((node = elements .iterateNext()) {
returnElements.push(node);
return
}
; >getElementsByClassName = 関数 (クラス名, タグ, elm) {
タグ = タグ || "*";
var クラス = className.split(" "),
classesToCheck = [],
elements = (tag === "*" && elm.all) : elm.getElementsByTagName(tag),
current,
returnElements = [],
match;
for(var k=0, kl=classes.length; kclassesToCheck.push(new RegExp("(^|\s)" クラス[k ] "(\s|$ )"));
}
for(var l=0, ll=elements.length; lcurrent = elements[l] ;
match = false ;
for(var m=0, ml=classesToCheck.length; mmatch =classesToCheck[m].test(current.className);
if (!match ) {
break;
}
}
if (match) {
returnElements.push(current)
}
return returnElements;
};
return getElementsByClassName(className, tag, elm);


を参照してください。その中の使用方法。

この方法を使用すると、IE6 および 8 で表示できるようになりますが、何度か更新するとエラーが報告される場合があります。今のところ解決策はありません。そこで、jquery を使用してこの更新エラーの問題を解決できないかと考えました。もちろん、jquery は getElementsByClassName メソッドを置き換えることもできます。その使用方法はここでは紹介しません。ただし、現実は人々が望むものではありません。更新には依然として問題があり、エラーは最初の読み込みプロセス中に報告される場合もあれば、数回更新した後に報告される場合もあります。英雄たち。解決策を模索します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。