3

私が今持っているのは

function setMenuCurrentTo(variable)
{
document.getElementById("game_" + variable).style.display = "block";
var elems = document.getElementsByClassName("current_nav");

for (var i=elems.length; i--;) {
elems[i].style.display = "none";
elems[i].className = 'none';
}
document.getElementById("game_" + variable).className="current_nav";
}
}

したがって、特定の要素(変数)を持つタグをクリックすると、コンテンツが追加され、別のコンテンツが「非表示」になります。しかし、同じボタンを 2 回クリックすると、コンテンツが消えてコンテンツがなくなるというバグがあります。

だから私はこのコードを試しました:

function setMenuCurrentTo(variable)
{
document.getElementById("game_" + variable).style.display = "block";
if (getElementById("game_" + variable).hasClass("current_nav")) {
}
else {
var elems = document.getElementsByClassName("current_nav");

for (var i=elems.length; i--;) {
elems[i].style.display = "none";
elems[i].className = 'none';
}
document.getElementById("game_" + variable).className="current_nav";
}

if (getElementById("game_" + variable).hasClass("current_nav")) {} else {

コードが機能しないようにします。コンテンツは表示されますが、他の「非表示」はありません。私のコードの問題は何ですか? ありがとう、私は JavaScript の初心者です。昨日、元のコードのヘルプを入手しました。ありがとうございました。

編集:

私は正しい答えを得ました:wroniastyから

function setMenuCurrentTo(variable)
{
document.getElementById("game_" + variable).style.display = "block";
if (jQuery('#game_' + variable).hasClass('current_nav')) {
}
else {
var elems = document.getElementsByClassName("current_nav");

for (var i=elems.length; i--;) {
elems[i].style.display = "none";
elems[i].className = 'none';
}
document.getElementById("game_" + variable).className="current_nav";
}
}
4

4 に答える 4

6

hasClassネイティブ DOM オブジェクトにはメソッドがありません。次のいずれかを使用できますclassList

elem.classList.add('foo')
elem.classList.contains('foo')

または分割className

elem.className.split(/\s+/).indexOf('foo') !== -1

classListIE 9 以前ではサポートされていませんが、本当に必要な場合は shim を入手できます。正規表現で分割するclassNameと、正規表現がなくても問題なく機能します。

また、jQuery を試すことも検討します。コードを簡素化できます:

function setMenuCurrentTo(name) {
    $('.current_nav').hide();
    $('#game_' + name).show().addClass('current_nav');
}
于 2013-05-13T17:19:00.963 に答える
1

DOM 要素の.classListプロパティを使用します。

getElementById("game_" + variable).classList.contains("current_nav")

古いブラウザー用のパッチを利用できます(ただし、プロトタイプで必要な場合は通常 IE6/7 ではありません)

于 2013-05-13T17:18:07.663 に答える