2009-05-22 8 views
9

getElementByIdのようなブラウザでgetElementByClassを安全に使用できますか?現在使用してgetElementByIdなどのブラウザ間でgetElementByClassを安全に使用できますか?

更新 は:

window.opener.document.getElementById 

しかし、私はクラス名によってオブジェクトを参照したい(そのクラス名を持つ唯一の1要素が存在します)。

+1

それは希望だけがある場合特定のクラスのDOMを検索することは理想的ではありませんが、jQueryのようなフレームワークを推奨する必要がある場合は、IDでアクセスする方が効率的です。 – xenon

答えて

2

IIRCのgetElementsByClassNameはSafari 3.1のFirefox 3に導入され、Chromeの最初から使用されています。 Operaに追加されたかどうかはわかりませんが、Internet Explorerにはまったく存在しません。 (DOMプロトタイプを拡張してIE8に追加することもできますが、Grant's answerを参照してください)

つまり、クロスブラウザgetElementsByClassNameが必要な場合は、独自にロールを張るか、フレームワークを使用する必要があります。

+0

SafariとChromeは両方ともWebKitをHTMLレンダリングエンジンとして使用します。 – Gumbo

+2

これは当てはまりますが、異なるJavascriptエンジンを使用しています。 – mishac

+1

@ガンボー - もちろん、それは中国のお茶の値段と関係がありますか? :-) –

2

他で述べたように、getElementsByClassNameはInternet Explorerでは使用できません。

IEで機能を実装する方法については、Document Object Model Prototypes, Part 1: IntroductionCustomizing the DOMセクションを参照してください。

+0

これはIE8でのみ動作するようです。 IE6では、 'Element.prototype'や' HTMLDocument.prototype'を拡張することはできません(あるいは、私は信じています、7)。 –

1

実際に使用したい場合は、オブジェクトが使用する前にオブジェクトがgetElementsByClassnameをサポートしているかどうかをテストし、ブラウザがサポートしていない場合はJS実装にフォールバックすることができます。

1

私は

+0

はwindow.openerの呼び出しでjqueryの作業を行いますか? – Blankman

+0

がオープナにロードされていれば... window.opener。$( '...')works;) – Tracker1

9

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

"//あなたのカスタム関数"で既に他の人によって多くの作業が行われています。あなた自身でそれを行う必要があるように感じる。 1つの具体的な例はSizzleJSです:http://sizzlejs.com/ –

関連する問題