我正在做一个 jQuery 多选择器查找:
element.find("fieldset, input[type=hidden], input[type=text], :radio")
在 Chrome 版本 1 中,它在jquery 的 selector.js 的第 722 行给出了这个错误“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 测试版中(可能是因为它实现了selector.js#703document.documentElement.compareDocumentPosition
,所以它从来没有遇到过这个代码)。
为了解决这个问题,我用四个单选替换了多选器,我将它们合并在一起,效果很好,但它真的很难看:
elements = element.find('fieldset')
.add(element.find('input[type=hidden]'));
.add(element.find('input[type=text]'));
.add(element.find(':radio'));
这真的是解决这个问题的唯一方法,还是我能做些什么?
更新在 Sizzle 讨论论坛上有一个关于此的线程,已经发布了 Sizzle(jQuery 选择器)代码的可能补丁,这可能会进入 jquery 核心。在动态代码上执行多个选择器时,这似乎只是一个问题