Я выполняю поиск нескольких селекторов jQuery:
element.find("fieldset, input[type=hidden], input[type=text], :radio")
а в версии Chrome 1 выдает эту ошибку «INVALID_NODE_TYPE_ERR: DOM Range Exception 2» на строка 722 jquery 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. forum, был опубликован возможный патч для кода Sizzle (селектор jQuery), он может попасть в ядро jquery. Кажется, это проблема только при использовании множественного селектора в динамическом коде.