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

因此,当我单击具有特定元素(变量)的标签时,它会添加内容并“隐藏”另一个内容。但是有一个错误,当我在同一个按钮上单击两次时,内容消失了,我没有更多的内容了。

所以我尝试了这段代码:

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

编辑:

我得到了正确的答案:来自 woniasty

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

getElementById返回一个DOMNode并且hasClass.DOMNode

你可能想使用一个库,比如 jQuery:

jQuery('#game_' + variable).hasClass('current_nav')
于 2013-05-13T17:15:34.000 回答
6

本机 DOM 对象没有hasClass方法。您可以使用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 回答
2

hasClass是一个 jQuery 函数,不能在纯 Javascript 中工作。您需要匹配元素的className属性:

将该行替换为:

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

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

用 javascript查看“hasClass”?更多细节。

于 2013-05-13T17:16:06.927 回答
1

使用 DOM 元素的.classList属性

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

补丁可用于较旧的浏览器(如果您希望在原型上使用,通常不是 IE6/7)

于 2013-05-13T17:18:07.663 回答