2011-12-01 5 views
1

私が直面している問題は次のとおりです。私はメニューを作成しました。子li要素がクリックされて親li要素に追加されるときに必要です。javascript setAttibuteはCSSクラスを追加しません

これらは、上記に関連している私のコードの一部である:

<head> 
<script type="text/javascript"> 
    function changeClass (elementID, newClass) { 
     var element = document.getElementById(elementID); 

     element.setAttribute("class", newClass); //For Most Browsers 
     element.setAttribute("className", newClass); //For IE; harmless to other browsers. 
    } 
</script> 
</head> 

<body> 
    <li id="galleries" class="galleries"> 
    <a class="sf-with-ul" href="#">Galleries<span class="sf-sub-indicator"> &#187;</span></a> 
    <ul> 

     <li> 
      <a href="timetest.php?action=add_gallery"onClick="changeClass('galleries',current)">Add Gallery</a> 
     </li> 
     <li><a href="timetest.php?action=edit_gallery">Edit Gallery</a></li> 
    </ul> 
     </li> 
</body> 

電流iがid=galleriesを持つ要素に追加したいクラスです。

これが機能しない理由がわかっている場合は、私を助けてください。 私のページの残りのコードは、これが何か役割を果たす場合はPHPで書かれています。

+0

'setAttribute()'を2回呼び出す必要はありません。 'className' DOM属性を変更することは、すべてのブラウザで機能します。 – duri

答えて

3

element.className = "new-class"してみましたか?これについては、Change an element's class with JavaScriptでも詳しく説明しています。jQueryを使用することをお勧めします。これは、さまざまなブラウザでこれを処理するためです。あなたが書いたものの文脈では

+2

プロパティを直接参照するときにsetAttributeを使用する理由はいつも不思議で、より直接的なようです。 '.className'はすべてのブラウザで動作します。 – jfriend00

+0

@ jfriend00が合意しました。私は 'setAttribute'を使うことを提案する多くのウェブサイトを見つけましたが、本当に' .className'を直接使うことができます。私は2002年以来それをやってきました。 :) –

+0

@jfriend: "zomgがオブジェクトのプロパティに直接アクセスしている可能性があります。悪い悪いのはセッター/ゲッタを使用する必要があります!"カーゴ・カルト姿勢。 –

0

onClick="changeClass('galleries',current)" 

current javascriptの変数になります。

はもしかして:

onClick="changeClass('galleries','current')" 
+0

を使うのですか?たぶん彼は 'current'がvarである部分を貼り付けなかったでしょう。 –

+0

私はOPが私が推測したことを推測していますが、あなたが書いたものはより簡潔になるはずですが、彼らは*働かなければなりません* – hunter

+0

このスクリプトを見つけたところでは、 elementIDは引用符で囲まれています。新しいクラス(現在)については何も言及していませんでしたが、私はそれを試みましたが、違いはありません... – fotant

-1

は、なぜあなたはするsetAttrのaddClassのinspiteを使用していけませんか?

$('.menu li').parent().addClass("className"); 
+0

OPはjqueryを使用しておらず、javascriptはjQueryではありません。 –

+0

-1これはjQueryに関連する質問でないときになぜjQueryメソッドを使用していないのかを尋ねるためのものです。 – jfriend00

+0

はいこれはjQueryです。私は純粋なjavascriptで何かを好むでしょう..関数のelement.setAttribute( "className"、newClass)とelement.className = newClassはどちらも動作するはずですが、そうではありません。私は関数を呼び出す方法に何か悪いがありますか? – fotant

関連する問題