私はjQueryの複数セレクターの検索を行っています:
element.find("fieldset, input[type=hidden], input[type=text], :radio")
Chromeバージョン1では、jqueryのselector.jsの722行目に「INVALID_NODE_TYPE_ERR: DOM Range Exception 2」というエラーが表示されます
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 の隠し入力フィールドです。私が見つけたところによると、このエラーは Chrome の新しいベータ版では発生しないため、古い Webkit バージョンの問題のようです(おそらく、 selector.js#703document.documentElement.compareDocumentPosition
を実装しているため、このコードにヒットしないためです)。
この問題を回避するために、マルチセレクターを 4 つの単一選択に置き換えました。これらをマージすると正常に動作しますが、実際には醜いです:
elements = element.find('fieldset')
.add(element.find('input[type=hidden]'));
.add(element.find('input[type=text]'));
.add(element.find(':radio'));
これは本当にこれを回避する唯一の方法ですか、それとも他にできることはありますか?
更新Sizzle ディスカッション フォーラムにこれに関するスレッドがあり、Sizzle (jQuery セレクター) コードへの可能なパッチが投稿されました。これは jquery コアに入る可能性があります。動的コードで複数のセレクターを実行する場合にのみ問題になるようです