如何在JavaScript中判断两个具有相同id的div是否存在?

4

有没有办法检查两个div是否具有相同的ID?

我动态创建了div,现在发现删除具有重复ID的div非常困难,请问有人可以帮忙吗?


id 必须是唯一的。 - Janar
应该是唯一的,不是吗? :) - mayersdesign
没错,但是原帖中说他们动态创建div,这种情况下IDE是无法帮助的。 - Patrick Hund
@AyushiTomar 在创建动态内容时,请使用类而不是ID。 - TypedSource
3
这似乎是一个 XY 问题。你应该专注于重复 ID 是如何或为什么被创建,而不是如何移除它们。 - charlietfl
显示剩余3条评论
7个回答

3

我不知道你在这里想要实现什么,但通常情况下,你不应该有两个具有相同id的元素。但是如果你有某些原因需要这样做,也许你正在构建一个验证器或类似的东西,你可以按照以下方式计算元素的数量:

var count = document.querySelectorAll('#test').length;

console.log(count);

然后,您可以循环遍历它们并使用

删除它们。
document.querySelectorAll('#test')[1].remove();

添加了如何删除它们的内容,因为您知道它们的数量,可以循环直到达到它们的数量-1并将它们删除。 - Fady Sadek
谢谢,如果我想给那个重复的div赋予其他id怎么办? - Ayushi Tomar
1
document.querySelectorAll('#test')[1].id = "another-id"; - Fady Sadek
很棒,很高兴能帮到您,请接受此答案作为正确答案,这样其他人就知道它对您有用了:D - Fady Sadek

1
尝试使用以下内容:
        $('[id]').each(function () {
            var ids = $('[id=' + this.id + ']');
            if (ids.length > 1 && ids[0] == this) {
                $(ids[1]).remove();
            }
        });

0

你需要像辅助函数一样循环所有元素,因为getElementById()在ID不唯一时无法正常工作。

例如,不需要jQuery。弹出重复的ID。

var idMap = {};

var all = document.getElementsByTagName("*");

for (var i=0; i < all.length; i++) {
     // Do something with the element here
     var elem = all[i];
     if(elem.id != ""){ //skip without id
       if(idMap[elem.id]){
          alert("'" + elem.id + "' is not unique")

       }
       idMap[elem.id] = true; 
     }
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

    <title></title>
</head>
<body>
    <div id="id1"></div>
    <div id="id2"></div>
    <div id="id3"></div>
    <div id="id4"></div>
    <div id="id5"></div>
    <div id="id1"></div>
</body>


</html>


0

$('[id]').each(function(){
    var ids = $('[id="'+this.id+'"]');
        if (ids.length>1 && ids[0]==this){
            $("#"+this.id).remove();
        }
 });​

上述函数使用jQuery创建文档中所有ID的数组并删除重复的ID。


$("#"+this.id).last() 没有意义。 - Joe Frambach

0

像这样的代码应该可以实现你想要的功能

$('[id]').each(function (i) {
    $('[id="' + this.id + '"]').slice(1).remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id = "1">
ola
</div>
<div id = "2">
ole
</div>
<div id = "1">
ola
</div>
<div id = "3">
olo
</div>
<div id = "1">
ola
</div>
<div id = "3">
olo
</div>

基于链接的示例:jQuery:查找重复ID并仅保留第一个


0
var idList = [];
$('*[id]').each(function(){
    var id = $(this).attr('id');
    if($.inArray(id, idList)){
        alert('the id ' + id + ' is already set!');
    } else {
        idList.push(id);
    }
});

1
请提供解释,而不仅仅是代码。 - Renats Stozkovs
@bc004346 在每个设置了id的标签中搜索并检查该id是否已存在于数组中。如果已存在,则发出警报,否则将该id推入数组并继续执行。更好吗? - TypedSource

-1
你可以不用控制+C和搜索id吗?如果您正在使用像atom这样的编辑器,在搜索之后,您可以一次性删除每个其他的重复项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接