我知道,这两个元素不能拥有相同的id。但事实是这样,在我的项目中,我有两个在其他div中具有相同id的元素,比如这个
<div id="div1">
<img id="loading" />
</div>
<div id="div2">
<img id="loading" />
</div>
和css:
#div1 #loading
{
some style here...
}
#div2 #loading
{
another style here...
}
对我来说很好,但也许这样做不被推荐吗?
由于
更新
是的,我知道,我可以使用课程,并且强烈建议这样做,但我想知道这种使用id有任何潜在的风险吗? 我想不,因为我写的时候是
$("#div1 #loading")...
它成为一个独特的元素。
不是吗?
最终更新
如果您有理由这样做,请使用建议的原则! ;)
答案 0 :(得分:19)
将您的ID更改为班级。给出重复的id并不是一个好主意。
想想两个同班同学的学生。想象一下他们得到的考试成绩。学校将如何识别该标记?
您的方式不是跨浏览器兼容,并且会在编写JavaScript,发布表单等方面影响很多
使用类
可以获得相同的效果见
<div id="div1">
<img class="loading" />
</div>
<div id="div2">
<img class="loading" />
</div>
和css:
#div1 .loading
{
some style here...
}
#div2 .loading
{
another style here...
}
答案 1 :(得分:12)
id必须(应该)才是唯一!!
在大多数浏览器中,通过JS选择它会有麻烦 - 更好地使用类
答案 2 :(得分:6)
最重要的原因是JavaScript DOM操作。在你的情况下,如果你做这样的事情......
document.getElementById("loading")
... JavaScript将返回第一个元素,仅返回第一个元素。如果没有严重的DOM行走,你将无法访问其余部分。
答案 3 :(得分:4)
仅仅因为没有其他人发布过它 - the HTML spec, section on ID,其中说:
id = name [CS]
此属性指定 元素的名称。这个名字必须 在文档中是独一无二的。
答案 4 :(得分:3)
ID应该是唯一的,因此id1和id2很好,但是对于许多具有相同样式的元素,请使用HTML类和CSS类选择器:
.loading
{
styles here
}
允许在页面上重复这些次数:)
答案 5 :(得分:3)
是的,你是对的,不建议这么做。 ID应始终是唯一的(例如,如果要使用javascript选择元素)。 如果您只想为div添加相同的样式,只需使用css类。
答案 6 :(得分:3)
在数学和逻辑学中,短语“只有一个”用于表示只存在一个具有某种属性的对象。
#div1 #loading
无法解决您在your document中有两个#loading
个实例的问题。所以,不,不要这样做。
答案 7 :(得分:2)
这是正常的吗?否。
是否推荐?当然不!它实际上是被禁止的(但执法力度很弱)。
但它(显然)有效,所以......
答案 8 :(得分:1)
Id用于区分元素,它们必须是唯一的,因为不同的原因,其中一个是使用javascript,如果你有重复的ID,getElementById这样的函数将无法正常工作,你将无法预测什么它会在不同的浏览器上执行,因为JS在每个浏览器上都是自我实现的。
如果你想使用#div loading和#div2加载这样的结构,似乎很清楚两个加载都有类似的用途,所以它们应该是类,并且会像这样使用
#div1.loading和#div2.loading
使用这种语法的另一个好处是将公共样式放在.loading中,就像这样
.loading {style common加载}
#div1.loading {style仅用于div1中的加载}
#div2.loading {样式仅由div2中的加载使用}
答案 9 :(得分:1)
https://www.w3.org/TR/1999/REC-html401-19991224/struct/global.html#adef-id
BUT!
如果您在项目中需要它,可以使用它,就像我的 问题最终更新 中建议的那样!
答案 10 :(得分:0)
答案 11 :(得分:0)
在元素上使用我是不好的做法。因为我会用他们的名字识别来提供一些独特的理解。第二件事我们在CSS中使用它,但在JavaScript中这是一种不好的做法。这个班级和学生的好例子。
所以不要这样做。
答案 12 :(得分:-3)
我不同意人们说总是使用“独特”,这意味着每次标注一个ID时都会使用不同的ID。有时它是可以接受的,例如我在制作计算器的情况。
javascript正在进行数学运算并将结果输出到id为“total”的div中。但是,我需要在两个不同的地方使用相同的“总数”。在这种情况下,为什么我不会使用具有相同ID的两个不同的div?我在两个盒子里都需要相同的数字。使用jQuery,我执行并输出一次数学,它同时填充两个div,这就是我想要的。
只要您了解如果您从具有相同ID的那两个div中提取信息的风险,那么我说是免费的。只要你不要混淆自己,并且在同一个div ID中需要2个不同的结果。