在Chrome上执行多个选择器时,jQuery中的INVALID_NODE_TYPE_ERR

我正在做一个jQuery多选择器查找:

element.find("fieldset, input[type=hidden], input[type=text], :radio") 

在Chrome版本1中,它在jquery的selector.js的第722行上给出了此错误“INVALID_NODE_TYPE_ERR:DOM范围exception2”

 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参见选择器。 js#703 )。

为了解决这个问题,我用四个单选项替换了多选择器,我将它们合并在一起工作正常,但它真的很难看:

 elements = element.find('fieldset') .add(element.find('input[type=hidden]')); .add(element.find('input[type=text]')); .add(element.find(':radio')); 

这真的是解决这个问题的唯一方法,还是我还能做些什么呢?

更新 在Sizzle讨论论坛上有一个关于这个的post ,一个可能的Sizzle(jQuery选择器)代码的补丁已经发布,这可能会进入jquery核心。 在动态代码上执行多重选择器时似乎只是一个问题

如果问题是Web浏览器,那么遗憾的是除了等待更新,或者使用多个选择器并合并结果集之外,您无法做任何事情。 从它的外观来看,这根本不会是一个很大的性能影响,因此我不担心它。

你有没有尝试过…

 element.find(['fieldset', 'input[type=hidden]', 'input[type=text]', ':radio']) 

作为参考,整个DOM和渲染只是Apple的WebKit,所以你看到的任何错误都应该报告给http://bugs.webkit.org – Chrome没有自己独特的引擎。