如何在设计糟糕的网页中选择多个ID?

时间:2013-08-06 17:47:38

标签: javascript jquery html

我正在维护一个复杂的Web应用程序。

我有大量的div都有相同的ID

我知道这是完全错误的,事实上document.getElementById()具有该ID只会为我生成一个匹配。

但是我能够使用jQuery(我们在1.6.2上)提取我正在寻找的元素,如下所示:$('#bad_id[nonstandard_attr_name=somethingSpecific]')

还没准备好说这是一个“解决方案”。

我担心这是否可靠。 jQuery是否真的会使用DOM walk搜索与ID匹配的所有元素?这可能是获得所有这些的唯一途径。

是否先按其他属性过滤元素,然后按ID过滤掉?这也会达到理想的行为,但最好知道它的顺序。

4 个答案:

答案 0 :(得分:8)

如果您需要选择具有相同ID的多个元素,您只需使用属性选择器:

$( "[id='myid']" )

属性选择器不会查看任何语义(如唯一ID等)的属性键。

http://jsfiddle.net/ZWm3G/

答案 1 :(得分:0)

我无法告诉你jQuery或其他dom遍历会做什么(可疑它会一直有效)但你可以试试这个:

document.filter = function(attr, val, r) {
    r = r || document.getElementsByTagName("*");
    var s = [];
    for(var i = 0; i < r.length; i++) {
        if(r[i].getAttribute(attr) == val) {
            s.push(r[i]);
        }
    }
    return s;
};

var s = document.filter("nonstandard_attr_name", "somethingSpecific", document.filter("id", "bad_id"));

console.log(s);

http://jsfiddle.net/KGPFf/1/

答案 2 :(得分:0)

使用会导致使用getElementById()以外的其他内容的选择器会产生一致的结果,但请确保使用IE8进行测试,因为IE8不使用document.querySelectorAll()

使用诸如 .find .children和.filter之类的方法也应该产生一致的结果,无论id是唯一的。

示例:http://jsfiddle.net/gb3Mz/

答案 3 :(得分:0)

好吧,正如评论中所见,我的猜测是为什么它会继续搜索任何元素。是 getElementById返回第一个元素,然后停止搜索,但同样看起来不适合jQuery。它确实返回具有“坏”id的所有元素。

可以在 Fiddle 中看到,

所以它选择了所有的元素,这意味着jQuery不会停留在第一个元素,而是继续搜索整个元素,因此IMO,你可以使用jQuery来选择具有公共id的多个元素。应该没有任何问题。