2016-12-21 15 views
1

IDタグを使用しないでHTML要素のクラスを変更したいのですが、これらの要素が非常に多いためです。私はこのような単純なことをしたいと思いますが、コードは機能しません。IDタグを使用しないクラスを変更するJavascript

<li ><a onclick="ChangeClass()" href="/Default.aspx">Home</a></li> 

<script> 
     function ChangeClass(){ 
      this.className = "active"; 
     } 
</script> 

EDIT:申し訳ありませんが、それはタイプでした。私のコードには角カッコがありましたが、まだ動作していません。

EDIT2:素早い返信をありがとう、私はそれらをすべて見て、メモを取る。

+0

あなたは[要素/ document.querySelectorAll()](https://developer.mozilla.org/en-US/docs/Web/API/Elementを使用することができます/ querySelectorAll)APIを使用して、 'className'または' classList'プロパティーを使用したいすべての要素のリストを取得します。 – Redu

+1

私は、あなたがonclick = "ChangeClass(this)"を必要とし、次にChangeClass(elm){elm.className = .....}を呼び出すと言うでしょう。 –

+1

'this'はあなたがそこで何をしているのかを意味しません。 – Liam

答えて

5

ここのウィンドウオブジェクトを指しています。 call/applyを使用して、このコンテキストを変更することができます。

チェックこのスニペット

function ChangeClass(event) { 
 
    this.className = "active"; 
 
}
.active { 
 
    color: red; 
 
}
<li><a href="/Default.aspx" class="default" onclick="ChangeClass.call(this)">Home</a> 
 
</li> 
 

 
<script> 
 
</script>

希望これではJavaScript this

+0

あなたは '.call()' 'ChangeClass(this)'は必要ありません。その場合は – Liam

+0

です。関数はパラメータを受け入れる必要があり、これは依然としてウィンドウオブジェクトを指しています。最小限の変更を加えてこのアプローチを実行できます – Geeky

2

を支援アクションを含む要素を指します。 あなたのようなあなたの関数でそれを使う方法は、DOM要素clickedのスコープを取得するのではなく、関数スコープだけを取得しています。 onClickハンドラで参照しているthisは、あなたが思うDOM要素ではありません。あなたは、このようにコードを変更する必要があります。

<li ><a onclick="ChangeClass(this)" href="/Default.aspx">Home</a></li> 

<script> 
     function ChangeClass(element){ 
      element.className = "active"; 
     } 
</script> 
関連する問題