2012-10-09 6 views
6

基本的に、特定のクラス名を持つすべての要素を見つけて、別のクラスに切り替えようとしています。これを元のクラス名に戻す別の関数があります。ここでのonclickでトリガのMy機能です:上記のクラスを持つすべての要素のCSSクラスをJavascriptで変更します。

function showEventsAppliedTo() { 
    var myObj = document.getElementsByClassName('notApplied'); 
    while (myObj.length >= 0) { 
     myObj[0].className = 'mblListItem notAppliedOut'; 
    } 
    AppliedToButton.set('style', 'display:none;'); 
    EventListingButton.set('style', 'display:block;'); 
} 

私はこのmyobj [0]は未定義であるというエラーを取得しています。なぜこれが起こっているのか?

メモとして、私たちはDojoを使用しています。したがって、関数の最後の行です。私はjQueryで簡単にこれを行うことができますが、私たちはそれを使用していないので、別のフレームワークを読み込むことは意味がありません。

ご協力いただきありがとうございます。アビシェーク・ミシュラからヘルプに

EDIT

おかげで、私はこのループを処理していますどのように変更され、私が望ましいものですJUST道場、でそれを行う方法を発見しました。コードは次のとおりです。

function listingClassToggle() { 
    dojo.query(".notApplied").addClass("notAppliedOut"); 
    dojo.query(".notApplied").removeClass("notApplied"); 
} 

私の以前の解決策よりもはるかに単純でコードがずっと軽いです。あなたのすべての協力に感謝します。私はこれが他の誰かを助けることを望む。

+0

おそらくdojoのforEachを使ってmyObjをループすることができます。それで、ゼロをチェックする必要はありません。 http://dojotoolkit.org/reference-guide/1.7/dojo/forEach.html。また、 'dojo.query( '。notApplied');' –

+0

のようなCSSベースのクエリの 'dojo.query'は、私が使用している方法よりも速く実行するのだろうか?以下の答えはそれを修正しましたが、私はこの方法も検討します。その問合せメソッドはgetelementよりも良いかもしれません – chazthetic

+0

dojoの 'query'はブラウザ間でより互換性があると私は信じています。 'getElementsByClassName'は良いですが、IE 7と8では動作しません;)http://caniuse.com/#search=getElementsByClassName –

答えて

5

> 0ではなく、>= 0をテストするだけです。長さがゼロに等しい場合、要素ゼロはありません。

+0

ああ、これです。 '0'は要素が残っていないことを意味します。私が思っていたwhile(myObj [0]){... ' –

+0

これは、関数がすべて正しくやっていて、最後にエラーを投げたように見えた理由を説明します。それはそれでした、ありがとう! – chazthetic

+0

'while'ステートメントを実行するのではなく、Dojoの機能だけで行う方法については、上記の私の編集を参照してください – chazthetic

関連する問題