我正在做一个 jQuery 多重选择器查找:
element.find("fieldset, input[type=hidden], input[type=text], :radio")
在 Chrome 版本 1 中,它在 line 722 of jquery's selector.js 上给出了这个错误“INVALID_NODE_TYPE_ERR: DOM Range Exception 2”
aRange.selectNode(a);
在上下文中:
function(a, b) {
var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
aRange.selectNode(a);
aRange.collapse(true);
bRange.selectNode(b);
bRange.collapse(true);
var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
if (ret === 0) {
hasDuplicate = true;
}
return ret;
}
在这种情况下,a
是一个 HTML 隐藏输入字段。据我所知,它似乎是较旧的 webkit 版本的问题,因为这个错误不会发生在新的 Chrome 测试版中(可能是因为它从来没有命中此代码,因为它实现了 document.documentElement.compareDocumentPosition
参见 selector.js#703)。
为了解决这个问题,我用四个单选替换了多选,我将它们合并在一起,效果很好,但它真的很难看:
elements = element.find('fieldset')
.add(element.find('input[type=hidden]'));
.add(element.find('input[type=text]'));
.add(element.find(':radio'));
这真的是解决这个问题的唯一方法吗,还是我还能做些什么?
更新 有一个 thread about this on the Sizzle discussion forum ,一个可能的 Sizzle(jQuery 选择器)代码补丁已经发布,这可能会进入 jquery 核心。这似乎只是在对动态代码执行多重选择器时才会出现问题
最佳答案
如果问题出在网络浏览器上,那么遗憾的是您只能等待更新,或者使用多个选择器并合并结果集。从表面上看,这根本不会对性能造成太大影响,因此我不担心。
关于javascript - 在 Chrome 上执行多个选择器时 jQuery 中的 INVALID_NODE_TYPE_ERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770669/