getElementByIdのようなブラウザでgetElementByClassを安全に使用できますか?現在使用してgetElementByIdなどのブラウザ間でgetElementByClassを安全に使用できますか?
更新 は:
window.opener.document.getElementById
しかし、私はクラス名によってオブジェクトを参照したい(そのクラス名を持つ唯一の1要素が存在します)。
getElementByIdのようなブラウザでgetElementByClassを安全に使用できますか?現在使用してgetElementByIdなどのブラウザ間でgetElementByClassを安全に使用できますか?
更新 は:
window.opener.document.getElementById
しかし、私はクラス名によってオブジェクトを参照したい(そのクラス名を持つ唯一の1要素が存在します)。
IIRCのgetElementsByClassName
はSafari 3.1のFirefox 3に導入され、Chromeの最初から使用されています。 Operaに追加されたかどうかはわかりませんが、Internet Explorerにはまったく存在しません。 (DOMプロトタイプを拡張してIE8に追加することもできますが、Grant's answerを参照してください)
つまり、クロスブラウザgetElementsByClassName
が必要な場合は、独自にロールを張るか、フレームワークを使用する必要があります。
他で述べたように、getElementsByClassName
はInternet Explorerでは使用できません。
IEで機能を実装する方法については、Document Object Model Prototypes, Part 1: IntroductionのCustomizing the DOMセクションを参照してください。
これはIE8でのみ動作するようです。 IE6では、 'Element.prototype'や' HTMLDocument.prototype'を拡張することはできません(あるいは、私は信じています、7)。 –
実際に使用したい場合は、オブジェクトが使用する前にオブジェクトがgetElementsByClassnameをサポートしているかどうかをテストし、ブラウザがサポートしていない場合はJS実装にフォールバックすることができます。
getElementsByClassName
は残念ながら信頼性がない(IE6-7は通常、大きな問題である)CSSセレクタのモデルをサポートし、ブラウザの互換性の問題を扱うどちらも、prototype.jsのか、jQueryのようなラッパーライブラリを使用することをお勧めしクロスブラウザ。現在、Firefox、Opera、Safari、Chromeの最新バージョンでサポートされていますが、Internet ExplorerやKonquerorではサポートされていません(Quirksmode)。
あなたはクロスブラウザにそれを使用したい場合は、あなたがそれをサポートしていないブラウザのための独自の実装を提供する必要があります、like in PPK's blog:
function getElementsByClassName(node,classname) {
if (node.getElementsByClassName)
return node.getElementsByClassName(classname);
else {
// your custom function
}
}
"//あなたのカスタム関数"で既に他の人によって多くの作業が行われています。あなた自身でそれを行う必要があるように感じる。 1つの具体的な例はSizzleJSです:http://sizzlejs.com/ –
それは希望だけがある場合特定のクラスのDOMを検索することは理想的ではありませんが、jQueryのようなフレームワークを推奨する必要がある場合は、IDでアクセスする方が効率的です。 – xenon