在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没有自己独特的引擎。
- 在Chrome和Firefox上捕捉Backspace是不同的
- 在Chrome的Ominbox上按下Enter键时会激活Keyup事件侦听器
- jQuery load()代码在Google Chrome中无效
- jQuery FadeIn在移动Chrome Android中无法正常运行
- 将HTTP内容嵌入到HTTPS站点中
- JQuery Autocomplete在Chrome中工作但在android中没有使用phonegap
- Chrome DevTools脚本黑盒子无效
- Highcharts鼠标跟踪/鼠标hoverfunction在chrome上很慢但在firefox或IE中并不慢
- 该字段必须是日期 – Chrome中的DatePickervalidation失败 – mvc