我的控件是根据用户输入动态构建的,还有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
的操作?
答案 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版本:
但我们建议不是好习惯
答案 7 :(得分:0)
组件:如果您编写可重用组件,例如),然后在示例中将两个或两个以上的组件放入一个文档中,那么您将获得INVALID html。因此,id
使用class
。