INVALID_NODE_TYPE_ERR в jQuery при выполнении нескольких селекторов в Chrome - PullRequest
2 голосов
/ 21 апреля 2009

Я выполняю поиск нескольких селекторов jQuery:

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

и в Chrome версии 1 выдает эту ошибку «INVALID_NODE_TYPE_ERR: исключение диапазона DOM 2» на строке 722 файла выбора jquery.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 ]

1 голос
/ 21 апреля 2009

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

0 голосов
/ 21 апреля 2009

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

0 голосов
/ 21 апреля 2009

Вы пробовали ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...