INVALID_NODE_TYPE_ERR в jQuery при выполнении нескольких селекторов в Chrome

Я делаю JQuery несколько селектор найти:

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

и в Chrome версии 1 он выдает эту ошибку "INVALID_NODE_TYPE_ERR: исключение диапазона DOM 2" в строке 722 файла jorery selector.js

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'));

Это действительно единственный способ обойти это, или я могу что-то еще сделать?

ОБНОВЛЕНИЕ На дискуссионном форуме Sizzle есть ветка об этом, опубликован возможный патч для кода Sizzle (селектор jQuery), который может попасть в ядро ​​jquery. Кажется, проблема возникает только при использовании множественного селектора в динамическом коде.

3 ответа

Если проблема в веб-браузере, то, к сожалению, вы ничего не можете сделать, кроме как ждать обновления или использовать несколько селекторов и объединить результирующие наборы. Судя по всему, это не будет большим ударом по производительности, и поэтому я не буду беспокоиться об этом.

Для справки, весь DOM и рендеринг - это всего лишь Apple WebKit, поэтому о любых обнаруженных ошибках следует сообщать по http://bugs.webkit.org/ - Chrome не имеет своего собственного уникального движка.

Ты пытался...

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

?

Другие вопросы по тегам