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