2013-05-13 3 views
2

То, что я сейчасЕсли элемент с идентификатором имеет как класс

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"; 
} 
} 

Так что, когда я нажимаю тег с определенным элементом (переменной) она добавляет содержание и «шкуры» еще один. Но есть ошибка, когда я дважды нажимаю одну кнопку, содержимое исчезает, и у меня больше нет контента.

Так что я попробовал этот код:

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, вчера мне помог исходный код. Еще раз спасибо.

EDIT:

я получил правильный ответ: от 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"; 
} 
} 
+0

Не могли бы вы объяснить, что должен делать этот код? –

+0

@Muhammad Ramahy Это должно сделать контент и другие исчезнуть, как и тип http://otservlist.org/ots/1368480. Там, где говорится описание, MOTD, этот тип вещей. –

ответ

4

getElementById возвращает DOMNode и нет hasClass метода DOMNode.

Вы можете использовать библиотеку, как JQuery:

jQuery('#game_' + variable).hasClass('current_nav') 
+0

или 'if (getElementById (« game_ »+ переменная) .className ==« current_nav »)' –

+1

@MuhammadRamahy, который будет работать только в том случае, если 'current_nav' является единственным классом в элементе – wroniasty

+0

К сожалению, я предположил, что это определенно багги –

2

hasClass функция JQuery и не будет работать в обычном JavaScript. Вы должны соответствовать против атрибута элемента className вместо:

Замените эту строку с:

if (getElementById("game_" + variable).className.match(/\bcurrent_nav\b/)) {} else { 

Это будет соответствовать элементу, даже если она содержит несколько имен классов.

Для получения более подробной информации см. "hasClass" with javascript?.

+0

'\ bfoo \ b' соответствует' foo-bar' – Blender

+0

Этот не работал для меня: S –

+0

, но Thankyou: D –

1

Используйте элемент .classList property элемента DOM.

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

Патчи доступны для старых браузеров (хотя обычно не IE6/7, если вы хотите его прототип).

+0

Не работал для меня: S Но спасибо: D –

+0

@LohnClaidon: Ну .. это не имеет смысла, если вы не используете старый браузер. – 2013-05-13 18:10:24

3

Существует нет метода hasClass на внутренних объектах DOM. Вы можете использовать classList:

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

Или разделить className:

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

classList не поддерживается в IE 9 и ниже, но вы можете получить подкладку, если вам действительно нужно. Разделение className с регулярным выражением будет работать отлично, без одного.

Кроме того, я хотел бы попробовать попробовать jQuery.Вы можете упростить код:

function setMenuCurrentTo(name) { 
    $('.current_nav').hide(); 
    $('#game_' + name).show().addClass('current_nav'); 
} 
+0

Спасибо! Работает нормально! –

Смежные вопросы