2010-12-30 5 views
2

「getElementsByClassName」メソッドを持たないブラウザの特定のクラス名のすべての要素を取得するメソッドを作成しようとしています。これは、サーバーサイドで生成される要素に対しては完全に機能しますが、ページには何らかの理由で要素を動的に追加する機能があります。 'window.document.all'はこれらの動的要素を取得しません。何か案は?以下の方法。document.getElementsByTagNameを使用して動的に追加された要素が見つかりません(IE6)

function getClassName(class) { 
     var i, neededStuff = [], elements = document.getElementsByTagName('*'); 

     for (i = 0; i < elements.length; i++) { 
      if (elements[i].className == class) { 
       neededStuff[neededStuff.length] = elements[i]; 
      } 
     } 
     return neededStuff; 
    } 
+0

何それは 'getElementsByTagName'と関係があるのでしょうか? –

+0

私はgetElementsByTagNameを使用していましたが、投稿する前に何かをテストするために 'window.document.all'に切り替えました。 – ploosh

答えて

4

classはIEの予約キーワードです。それを文字通り使用しないでください。 classtheClassのように変更します。

また、classを変更しないとdocument.allの代わりにdocument.getElementsByTagName('*')を試してください。

EDIT:IE6で私のために完全に

http://work.arounds.org/sandbox/72

ワークス^

が...私は追加動的に試してみましょう

EDIT#2:正常に動作します ..

http://work.arounds.org/sandbox/72

+0

これはうまくいかず、同じことが起こった。 – ploosh

+0

+1 'document.all'(これは廃止予定)(https://developer.mozilla.org/en/DOM/document)から' getElementsByTagName'を使うべきでしょう。 – user113716

+0

@invaderkay - あなたのgetClassNameが単純すぎます。もっと複雑なバージョンを使用してみませんか?あなたは 'className =='をやっています。クラスには複数の値を含めることができます。 –

1

使用のjQuery :)

http://jquery.com/

$('.ClassName') 

あなたの要素を返します:)

その後、あなたはそれが価値だ変更することができ、非常に簡単にクラスを追加!

ここではいくつかの素晴らしいチュートリアル

http://docs.jquery.com/Tutorials

+0

これはコメントであり、提示されたコードの問題を解決するものではないためです。 – user113716

+0

@patrick True ...それは基本的に "あなたがやっていることを止め、答えのjQuery"タイプを使用していました:)そしてjQueryはIE6と互換性があります。 – turtlepick

+1

jQueryは常に最適な解決策ではありません。 – user113716

関連する問題