我有这样的东西
<div id='container0'>
<input id='item0'>
</div>
<div id='container1'>
<input id='item0'>
</div>
我想选择第二个 item0(div container1 中的那个)并将它的 id 更改为 item1。最好的方法?有没有办法可以选择页面上的所有 item0,然后检查它们的容器 div 并确保它与“container1”匹配?
感谢您的时间。
我有这样的东西
<div id='container0'>
<input id='item0'>
</div>
<div id='container1'>
<input id='item0'>
</div>
我想选择第二个 item0(div container1 中的那个)并将它的 id 更改为 item1。最好的方法?有没有办法可以选择页面上的所有 item0,然后检查它们的容器 div 并确保它与“container1”匹配?
感谢您的时间。
具有多个相同的元素id
是无效的。所以这里正确的解决方案是:修复它。(通常使用 aclass
代替,但还有其他选项。)
也就是说,您可以使用querySelector
:
var elm = document.querySelector("#container1 #item0");
但是由于结构无效,结果会因实现而异,如果很多(甚至大多数)返回我不会感到惊讶null
。
再次警告说,真正的解决方案是修复无效的副本id
,它可能比上面的更可靠,getElementById
用于获取container1
元素,然后循环遍历其子节点以查找与id == "item0"
.
在两个元素上具有相同的id
属性是语法错误,因此您应该修复标记。违反规则时,浏览器行为未定义。
如果由于某种奇怪的原因无法修复错误,您仍然可以找到带有 的元素id=container1
,如果该id
属性是唯一的,然后选择它的第一个子元素,如果标记与问题中给出的完全一致。
我知道你没有用 jQuery 标记它——但我认为它可能是一个解决方案。那么给每个 div 一个类,然后用 jQuery 运行一个 each-loop 呢?
<div id='container0' class='container'>
<input id='item0' class='item'>
</div>
<div id='container1' class='container'>
<input id='item0' class='item'>
</div>
然后我认为每个循环可以像这样处理它:
$('div.container').each(function(key, value) {
var elmid = $("#"+key + " div.item).attr('id');
var containerid = $(this).attr('id');
var newelmid = elmid.replace('item','');
var newcontainerid = elmid.replace('container','');
if(newelmid != newcontainerid)
{
$("#"+elmid).attr('id', 'item'+newcontainerid);
}
});
让我知道这是否接近您想要做的:)
正如其他人提到的,您不能为多个元素使用相同的 id。但是,您可以使用相同的名称。在更正多个 id 的语法问题以使每个 id 都唯一之后,您可以根据它所在的容器选择第二个输入元素。我会为此使用 jQuery。
例如(请注意,我不在电脑前 - 我在手机上,因此可能需要对语法进行一些细微的更改):
$("#container1 > input[name='item']").attr('id', 'item1')
对于 jQuery 选择器,请看这里:http ://api.jquery.com/category/selectors/
要更改属性,请看这里:http ://api.jquery.com/attr/