如果具有ID的元素具有类

时间:2013-05-13 17:11:37

标签: javascript if-statement

我现在拥有的是

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的新手,我昨天得到了原始代码的帮助。再次感谢你。

修改

我得到了正确答案:来自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 个答案:

答案 0 :(得分:4)

getElementById返回DOMNode,hasClass中没有DOMNode方法。

您可能想要使用库,例如​​jQuery:

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

答案 1 :(得分:3)

本机DOM对象上没有hasClass方法。您可以使用classList

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

或者拆分className

elem.className.split(/\s+/).indexOf('foo') !== -1
IE 9及更低版本不支持

classList,但如果你真的需要,你可以获得垫片。使用正则表达式将className拆分可以在没有正则表达式的情况下正常工作。

另外,我会考虑尝试jQuery。您可以简化代码:

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

答案 2 :(得分:2)

hasClass是一个jQuery函数,无法在纯Javascript中运行。您需要匹配元素的className属性:

将该行替换为:

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

即使它包含多个类名,也会匹配该元素。

有关详细信息,请参阅"hasClass" with javascript?

答案 3 :(得分:1)

使用DOM元素的.classList property

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

补丁适用于较旧的浏览器(如果你想在原型上使用它通常不是IE6 / 7)