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'])
?