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

标签 javascript jquery google-chrome webkit

我正在做一个 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/

相关文章:

javascript - 将旧的 JavaScript 代码转换为 ES6 模块

php - 返回 <div> 部分中先前显示的内容

javascript - 当元素有指定的子元素时移除元素

javascript - setDragImage 不删除 Chrome 上的重影图像?

javascript - 带有两个括号和两个参数的 JS 函数

javascript - JQuery 占位符 HTML5 模拟器

javascript - jQuery 中的 function() 是什么意思?这和 $(this) 有什么区别

jquery - 多个 jquery-ui slider

javascript - ZK Framework 在 Chrome 17 中不起作用吗?

javascript - 如何在终端中比较 Chrome 和 NodeJS 之间的 V8 Javascript 引擎版本?