改变html id是一个好习惯吗?

时间:2013-07-08 20:22:38

标签: javascript html css

在我的例子中,我有一个id为“foo1Closed”的div。当我点击“foo1Closed”时,我希望在div中更改许多元素(例如高度,宽度,颜色,可见性等)。

我完成此任务的一种方法是为.css文件中的每个元素编写两种样式。例如,“foo1Closed”的一种样式和“foo1Opened”的一种样式。像:

#foo1Closed {
   visibility:hidden;
}
#foo1Opened {
    visibility:visible;
}

然后我使用JavaScript函数来更改这些ID,例如:

document.getElementById("foo1Opened").id = "foo1Closed";

由于我不知道这种方法的潜在缺点,我希望有人可以回答,如果这是一种“好的”方式来实现这种交互性,或者我应该直接通过JavaScript修改样式,如下所示:

document.getElementById("foo1Opened").style.visibility = "hidden";

显然,一个解决方案将有更多的CSS代码,一个将有更多的JavaScript代码。我不知道的是,哪一个更有效(就项目的性能和/或建模而言)。

重新提出的问题:由于ID用于标识特定对象(意味着它们通常不应更改),是否有不同的方法可以在不编辑ID的情况下实现此目的,而且还不依赖于通过JavaScript手动更改每个元素?

8 个答案:

答案 0 :(得分:7)

不,你应该使用课程

#foo1.closed {
   visibility:hidden;
}
#foo1.opened {
    visibility:visible;
}

document.getElementById("foo1").setAttribute("class","closed");
document.getElementById("foo1").setAttribute("class","opened");

或者您可以在此基础上构建函数(但不要使用我的代码,避免使用全局变量)

... CSS ...

var foo1 = document.getElementById("foo1");

var openFoo = function() {
    foo1.setAttribute("class","opened")
}
var closeFoo = function() {
    foo1.setAttribute("class","closed")
}

答案 1 :(得分:5)

我个人的偏好是使用jQuery添加\删除类而不是更改ID。 当你想要获得更多的效果时,做后者就是在线下问题。

有些事情:

$("#foo1").removeClass("class1").addClass("class2");

或者你想有条件地实现它。

答案 2 :(得分:2)

将元素的ID视为不应随时间变化的唯一标识符,而CSS类表示可能随时间变化的元素的描述或元数据。

答案 3 :(得分:2)

快速而肮脏的回答:不,更改ID非常糟糕。

ID是元素的标识符。您不应该使用指向元素样式的ID。这样做并不是语义上的,并且会使重构过程变得更难。我知道你刚刚开始使用HTML / JS / CSS,但重要的是要知道:)

出于您在问题中描述的目的,最好的方法是使用课程。例如:

.opened {
   visibility: visible;
}
.closed {
   visibility: hidden;
}

<div id="foo1" class="opened"></div>

然后,在你的JavaScript中......

document.getElementById("foo1").setAttribute("class", "opened");
document.getElementById("foo1").setAttribute("class", "closed");

答案 4 :(得分:1)

我会说改变元素的id会“好”但不同意这样做。 id的目的是识别元素。因此,更改id应该真正改变元素。

为什么不添加和删除类,而不是更改id。

从语义的角度来看,您正在更改页面特定部分的属性,因此更改类更有意义。

答案 5 :(得分:1)

不应更改“id”属性

使用“class”属性

例如:

<style type='text/css'>
    div.closed {
        display:none;
    }
    div.opened {
        display:inline;
    }

</style>

<div id="foo1" class="opened">...</div>

在您的javascript函数中使用以下内容:

    var foo1 = document.getElementById("foo1");

    foo1.className="closed";


尽量避免通过这种方式更改类属性:

的document.getElementById( “foo1”)的setAttribute( “类”, “关闭”);

您应该使用DOM元素的 className 属性

答案 6 :(得分:0)

你可以改变类而不是id,并在你的样式中设置根据它的类来显示或隐藏元素。

答案 7 :(得分:-1)

你应该使用类,而不是ids