Я выполняю поиск нескольких селекторов 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 ядро. Кажется, это проблема только при использовании множественного селектора для динамического кода