2012-03-09 81 views
3

我正在创建一个网页,其中包含多个可能包含ID的HTML模板。因此,最终页面可能包含几个具有完全相同ID的HTML元素,但不允许HTML同一个HTML文档中的多个相同的ID

仍然我似乎能够使用jQuery上下文解决此问题,如:$(“#id54”,template4 ),但这会始终在所有浏览器中工作,或者一些浏览器会拒绝我多个ID吗?

+15

从不在DOM中具有相同的ID。 – PeeHaa 2012-03-09 14:23:36

+0

PS在选择id时,不应该添加上下文。只选择一个ID是非常快的。 – PeeHaa 2012-03-09 14:25:11

+0

所以你说的是,当你选择多个相同的ID时,jQuery返回更多的元素?它不应该和它认为非常不好的做法。使用多个类。 – 2012-03-09 14:25:43

回答

10

$(selector, context)语法将始终只在给定的上下文中进行搜索,因此只要您的ID在该上下文中是唯一的,您的jQuery就可以在所有浏览器中工作。

然而,当你意识到,在模板中以这种方式使用ID是不明智的。

由于不允许多个相同的ID,因此没有规定应如何处理。永远不能保证所有的浏览器都会继续支持你正在编写的代码。尽管如此,该代码在所有主流浏览器上的行为方式都将如此。

变通方法将使用模板引擎中的类或逻辑来确保唯一的ID,例如, templateID-control-2-myButton

+0

好的 - 看来我最好转向使用类来确保。 – 2012-03-09 16:30:42

4

只要您使用jQuery上下文,例如$('#some-id', context),它会正常工作。

但是,对于在页面中多次出现的元素,您应该真的使用类名称而不是ID。

+0

为什么downvote? – 2012-03-09 14:24:44

+0

为什么这是downvoted?我同意.. – 2012-03-09 14:25:41

1

没有浏览器会拒绝你多个ID,但这是不好的做法。 “ID”标签是文档对象模型(DOM)中对象的唯一标识符。如果你打算用这些ID来使用jQuery,你需要提出另一种解决方案。 注意:您的代码仍然可以正常工作,并且会在每个浏览器中呈现。如果你一直查询它并且它们都具有相同的ID,那么只需要更多地强调DOM。 (另外,不是很维护)

如果你需要每个模板具有相同的ID,可以考虑使用一个类(即.template),甚至是自定义属性(即<div class="something" mycustomid="1">然后使用$(东西).attr('mycustomid ')来访问它(注意:W3C的HTML验证器不会验证这一点)

如果你真的坚持使用ID,但想要使代码更好,请尝试为id的开头添加独特的前缀(Even如果你的模板是以这种方式创建的,那么迭代器的索引),然后使用jQuery做正则表达式匹配

这不是一个答案,但我没有足够的信息:)

相关问题