我现在拥有的是
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";
}
}
答案 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)。