检查是否存在相同id的HTML元素

3

这个能用JavaScript实现吗?


1
我认为在将元素添加到文档之前,最好先检查多个ID - 可以在服务器端或客户端进行。 - Andy E
5个回答

10
如果你想查找是否有多个元素共享一个id,使用jQuery可以这样做:$('[id=blah]').length - 这将返回所有id等于'blah'的元素数量。请参见示例。如果数量大于1,则存在重复的id。 编辑:我已在Chrome、FF和IE6中测试过这个方法,它们都显示有两个具有相同id的元素。我同意共享一个id不是好习惯,但这段代码确实有效。

1
-1 表示可能有多个 ID 等于 'blah' 的元素。 :-) - Marco Mariani
@Marco - 请仔细阅读问题:“检查是否存在具有相同id的HTML元素”,我认为OP是在问您是否可以检查多个元素是否共享相同的id。 - Skilldrick
只是开玩笑,因为具有相同ID的两个元素_绝对不应该_发生,但不幸的是我无法记得任何浏览器会发出关于此的警告/调试错误,这将是一件好事。至于投反对票,我不知道,我说了但实际上并没有这样做。现在我很困惑(并且正在点赞)。 - Marco Mariani
@Marco,不用担心,我知道你没有点踩,但是有人点了。 - Skilldrick
2
这可能是反对jQuery的人之一,因为他建议有时候JavaScript问题的最简单答案可能是使用jQuery。 - Skilldrick
但是,如果有人没有指定他们已经在使用 jQuery,那么只为了使用一个函数就引入一个大型的 js 库是否值得,当所有解决方案实际上只需要一些简单的 javascript? - stu

3
也许(如果我理解问题的话)。
if (document.getElementById('theId')) {
}

1
我最初的想法是这样的,但是我重新阅读了问题,可能存在多个具有相同ID的元素,如果是这种情况,那么只会返回其中一个。 - Andy E
如果已经存在多个具有相同ID的元素,那该怎么办呢? - Sussagittikasusa
2
如果您有多个具有相同ID的元素,则已经超出了有效HTML的范畴,可能无法使DOM方法正常工作,特别是跨浏览器。 - Thilo
@Suss:那么在添加元素之前进行ID检查。 - David Hedlund
@Thilo,也许吧,但是用jQuery是可能的——请看我的回答。 - Skilldrick
显示剩余3条评论

3

此外,为了打印出所有的重复项:

var elems = document.getElementsByTagName('*');
var num = elems.length;
var ids = [ ];
for(i=0; i<num; i++ ) {
    var id = elems[i].getAttribute('id');
    if(id != null) {
        if(ids.indexOf(id) >=0 ) {
            console.debug(id); // found in table
        } else {
            ids.push(id); // new id found, add it to array
        } 
    }
}

0

是的,它是。 通过 document.getElementsByTagName('*') 进行迭代,使用 element.getAttribute('id')


0
if(!document.getElementById('search')) { return; }

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