2015-04-02 25 views
9

Ich bin das folgende JavaScript in beiden Firefox Developer Edition 38 und Internet Explorer 8 und 9.

console.log('+++++++++++++++++++++++++++++++'); 
console.log('jquery version = ' + $.fn.jquery); 
var myHtmlString = "<!-- my comment -->" + 
         "<optgroup label='my label'>" + 
         "<option value='1'>option one</option>" + 
         "</optgroup>"; 

console.log($(myHtmlString)); 
console.log($(myHtmlString)[0]); 
console.log($(myHtmlString)[1]); 
console.log($(myHtmlString).length); 

In Firefox läuft, erhalte ich:

enter image description here

In IE

, erhalte ich:

enter image description here

Also, anscheinend in Firefox, ein HTML-Kommentar i s wird als ein Element dieses Objekts hinzugefügt, aber im IE ist es nicht. Warum verhält sich das so, gibt es einen Fehler oder gibt es eine andere Möglichkeit, dieses Objekt zu erstellen?

HINWEIS: Ich habe versucht $.parseHTML(myHtmlString), aber es tut das gleiche.

UPDATE: Diese Antwort How does jQuery treat comment elements? bietet eine mögliche Problemumgehung.

+0

Was ist '[Object Object]' im IE Log? Bist du sicher, dass das nicht dein Kommentar ist? –

+0

@ JonathanWood Betrachten Sie die unterschiedliche Ausgabe von $ (myHtmlString) .length – ceejayoz

+3

Ich kann keine Referenz finden, aber in Javascript erstellte Kommentare werden in IE nicht unterstützt, wenn ich mich richtig erinnere, es sei denn, sie sind mit Dokument erstellt. createComment', und ich glaube nicht, dass jQuery das verwendet – adeneo

Antwort

19

So hängt es von dem Browser Sie verwenden, aber da Sie vorbei in mehr als 1 einfach markieren, (als Beispiel $('<div>example html creation</div>')) jQuery läßt den Browser die Erstellung handhaben.

Wenn die HTML ohne Attribute komplexer als einen einzelner Tag ist, wie es in dem obigen Beispiel ist, die tatsächliche Erzeugung der Elemente wird durch den Browser des Mechanismus .innerHTML behandelt. In den meisten Fällen erstellt jQuery ein neues Element und setzt die Innerhtml Eigenschaft des Elements an das HTML-Snippet, das in übergeben wurde.

jQuery documentation

Firefox zum Beispiel durch jede Ihrer < > Bereichen suchen , und es findet 2. Während IE ist egal, und verarbeitet alles als 1 (daher die Länge 1).

Lange Geschichte kurz, du machst es gut. Das ist nur intern, wie der Browser damit umgeht, du musst dir darüber keine Sorgen machen!

+0

Wenn er einen Kommentarknoten will, dann ist es nicht wirklich in Ordnung. Die Tatsache, dass die Browser anders damit umgehen * ist * das Problem. Ganz zu schweigen davon, dass der falsche Elementknoten zurückgegeben wird. –

+0

@mcpDESIGNS Sie haben Recht: '$ (". Meine-Klasse ") .html (" ") .html()' 'zurück' "" in IE und " in chrome/firefox – kleaver

+2

Ich bin mir nicht sicher was ich falsch über die Frage verstehe ... aber das scheint so zu sein wie die Frage –

Verwandte Themen