Html重复ID

时间:2014-02-27 05:04:09

标签: javascript jquery html

我的控件是根据用户输入动态构建的,还有n个文本框,其ID也是动态的。

但是,我没有预见到这个HTML会在同一个html页面的其他地方重复使用。

我现在面临的问题是重复的ID,这导致我的jQuery函数无法正常工作。

我确实理解ID应该是唯一的,但是,我可以通过使用具有不同ID的最外层<div>来避免此问题吗?

那里的专家可以给我一些好的建议吗?

P.S。我正在寻找一个有效的解决方案,因为如果我需要更改每个元素的ID,那么我的jQuery需要做很多工作。

请帮忙。谢谢!

<div id="Container1">
  <div id="Control">
    <input type="text" id="TextBox1" />
    <input type="text" id="TextBox2" />
  </div>
</div>

<div id="Container2">
  <div id="Control">
    <input type="text" id="TextBox1" />
    <input type="text" id="TextBox2" />
  </div>
</div>

我想知道,在jQuery函数中,我是否可以在选择中执行类似.. #container1 > #textbox1的操作?

8 个答案:

答案 0 :(得分:14)

您绝对不应该有重复的ID 。它可能有用*,但它在语义上不正确, 你不应该这样做

你应该重构你的jQuery,无论多么糟糕。最好的选择是使用一个类,也许使用父类的特定id来指定你想要的那个

另一个不太吸引人但可行的方法是在ID的末尾添加一个数字或某些内容以使其唯一,然后使用jQuery检测具有ID的特定部分的任何元素

* - 正如Arun所描述的那样,jQuery会接受选择器,但 NOT 是有利的,因为它不正确

答案 1 :(得分:6)

  

我确实理解“Id”应该是唯一的,但是,outest   不同的“id”,它有助于解决问题吗?

没有。拥有非唯一元素ID将无法正常工作。在任何情况下都不一致(不同的浏览器和框架可能以不同的方式处理这种情况)。

  

那里的专家可以给我一些好的建议吗?

首选使用class而不是id,特别是对于可能在网页上多次重复使用的任何组件。

针对包含元素本身而不是内部组件元素设置id,并相应地修改jQuery选择器。或者交替实现组件,使其在使用时采用'namespace'参数/属性,并在每个classname前加上组件内的命名空间(这种方法在创建自定义JSP标记时效果特别好。)

答案 2 :(得分:3)

我建议您使用class代替id。重复id不是一个好习惯。

答案 3 :(得分:3)

即使是错误的,jQuery中的选择器没有任何问题

$('#Container1 #TextBox1').val(1)
$('#Container2 #TextBox1').val(2)

演示:Fiddle


更好的选择是使用属性选择器

$('#Container1 input[id="TextBox1"]').val(1)
$('#Container2 input[id="TextBox1"]').val(2)

演示:Fiddle

答案 4 :(得分:2)

我建议使用class而不是id。或者在生成动态ID时添加一些后缀。

答案 5 :(得分:1)

您不能多次拥有相同的id。请改用class

答案 6 :(得分:0)

取决于HTML版本:

  1. https://musingsinjava.wordpress.com/2014/11/02/enabling-jsf-2-2-and-cdi-1-2-on-tomcat-8/ ID必须是文档范围内唯一的。
  2. HTML 4 ID在容器树中唯一。
  3. 但我们建议不是好习惯

答案 7 :(得分:0)

组件:如果您编写可重用组件,例如),然后在示例中将两个或两个以上的组件放入一个文档中,那么您将获得INVALID html。因此,id使用class