2009-04-21 3 views
2

tut Ich mache einen jQuery mehr Wähler finden:INVALID_NODE_TYPE_ERR in jQuery, wenn mehrere Selektoren auf Chrome

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

und in Chrome-Version 1 gibt es diesen Fehler "INVALID_NODE_TYPE_ERR: DOM Bereich Ausnahme 2" auf line 722 of jquery's selector.js

aRange.selectNode(a); 

im Kontext:

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; 
} 

in diesem Fall a ist ein verborgenes HTML Eingabefeld. Von dem, was ich finden kann, scheint es ein Problem mit der älteren Webkit-Version zu sein, da dieser Fehler in der neuen Beta von Chrome nicht auftritt (wahrscheinlich, weil es nie diesen Code trifft, weil es document.documentElement.compareDocumentPosition implementiert siehe).

Um dieses Problem zu treten, habe ich den Multi-Wahlschalter mit vier Einzeln wählen ersetzt, die ich zusammen verschmelzen, die gut funktioniert, aber es ist wirklich hässlich:

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

Ist das wirklich der einzige Weg, um diese oder kann ich noch etwas anderes machen?

UPDATE Es gibt eine thread about this on the Sizzle discussion forum eine mögliche Patch auf die Sizzle (jQuery-Selektor) Code gepostet wurde, dies seinen Weg in jquery Kern finden. Es scheint nur ein Problem, wenn Sie einen Multiselektor auf dynamischen Code

+0

tritt es auch in anderen Browsern auf? –

+0

Nicht, dass ich weiß, aber ich bin derzeit nicht in der Lage, in Safari auf dem Mac zu testen, aber wenn es ein Problem in Webkit ist, würde ich mir vorstellen, dass es auch dort passiert –

Antwort

1

Wenn das Problem ist der Webbrowser, dann gibt es leider nichts, was Sie tun können, aber warten auf ein Update oder verwenden Sie die mehrere Selektoren und füge das Ergebnis zusammen Sätze. Von dem, wie es aussieht, wäre das kein großer Leistungshit und ich würde mir deswegen keine Sorgen machen.

+0

Das war mein Gedanke, ich hatte nur gehofft es gab einen weniger hässlichen Weg es zu tun –

0

Haben Sie versucht ...

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

?

+0

Leider bringt das nichts zurück :( –

0

Als Referenz ist das gesamte DOM und Rendering nur Apples WebKit, also sollten alle Fehler, die Sie sehen, an http://bugs.webkit.org gemeldet werden - Chrome hat keine eigene Engine.