4

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

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

我知道这是完全错误的,事实上document.getElementById(),该 id 只会为我产生一场比赛。

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

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

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

它是否先按其他属性过滤元素,然后按 ID 过滤?这也将实现所需的行为,但最好知道它执行此操作的顺序。

4

4 回答 4

8

如果您需要选择具有相同 id 的多个元素,您可以简单地使用属性选择器:

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

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

http://jsfiddle.net/ZWm3G/

于 2013-08-06T18:06:21.460 回答
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/

于 2013-08-06T17:52:11.970 回答
0

使用会导致其他结果而不是使用的选择器应该会产生getElementById()一致的结果,但请确保使用 IE8 对其进行测试,因为 IE8 不使用document.querySelectorAll().

使用.find .children和 .filter 等方法也应该产生一致的结果,而不管 id 是否唯一。

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

于 2013-08-06T18:02:20.537 回答
0

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

从这个Fiddle可以看出,

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

于 2013-08-06T18:08:49.863 回答