2010-09-30 6 views
6

Die folgende jQuery funktioniert in Firefox für mich, aber nicht in IE6:jquery name-Attribut Kartenelement in IE

$("<map></map>").attr("name",somevar).appendTo("#someElement"); 

Das Problem ist, dass das Kartenelement nie das Attribut name wird erzeugt, die ich beweisen kann, von alert($("#someElement").html()); und die Tatsache, fordern, dass das Bild, um es mit nicht seine Verbindungen zugeordnet ist, hat

Wenn ich diese stattdessen verwenden, es funktioniert gut:

$("<map name='" + somevar + "'></map>").appendTo("#someElement"); 

ich bin h appy die zweite Zeile des Codes zu verwenden, aber fragte sich, ob jemand anderes dieses Problem hatte ... oder eine Erklärung, warum es nicht funktioniert hat (ich frage mich, dass es spezifisch für das Attribut name ist) ...

(HTML Ausgabe von ersten und zweiten Szenario):

IE6 die erste Zeile unter Verwendung von:

<MAP><AREA shape=RECT coords=0,0,300,110 href="http://google.com"></MAP><IMG height=215 src="include/nav-images/main.png" width=591 useMap=#tehmap> 

IE6 unter Verwendung der zweiten Zeile:

<MAP name=tehmap><AREA shape=RECT coords=0,0,300,110 href="http://google.com"></MAP><IMG height=215 src="include/nav-images/main.png" width=591 useMap=#tehmap> 
+0

Sie denken, es ist nur so, dass z. B. Karten nicht wirklich erhalten? –

+0

Ich denke, Ihre Analyse ist sowohl gründlich als auch provokativ, was die Frage aufwirft, warum jemand so klar in Gedanken und Vernunft ist und ein Nicht-Formelement-Attribut "Name" nennt. Name ist der unbrauchbarste Attributname, den Sie möglicherweise festlegen könnten: a) Er bezieht sich auf zu viel, Elemente sind Elemente und ihre Namen werden als Tags deklariert. b). name ist eine besondere Eigenschaft von Formularelementen, die für die Formularübergabe verwendet werden. c) id ist der perfekte Ersatz für das, was Sie versuchen zu tun, es sei denn, der Name ist nicht eindeutig, in diesem Fall ist es sowieso kein sehr guter Name für das Attribut. +1 für einen guten Fehler finden. – Gabriel

Antwort

5

(Das ist mehr Kommentarmaterial, aber da es so lang ist, habe ich keine andere Wahl, als es als Antwort zu posten. Hoffentlich kann es jemand in die richtige Richtung weisen)

Einige Ergebnisse aus Untersuchungen, IE 8 in IE 7-Modus arbeitet (was auch dieses Problem aufweist).

$('<map />').attr('x', 'abc').wrap('<div />').parent().html() 
"<MAP x="abc"></MAP>" 

... kann es richtig eingestellt jedes andere Element eines map Tags. Aber warte ...

>>$('<map />').attr('name', 'abc').attr('name') 
"abc" 

So wird es eingestellt. Aber aus irgendeinem Grund lässt der HTML-Code, der von .html() zurückgegeben wird, es aus. Warum? Das eigentliche Objekt ist richtig, aber das Markup wird nicht richtig dargestellt.

Noch seltsam:

>>$('#dummy').append($('<map />').attr("name", "abc")) 
>>$('#dummy').html() 
"<MAP></MAP>" 

Aber wenn ich im HTML aussehen nach den IE-Entwickler-Tool, es ist ...

<map submitName="abc"/> 

Ich untersuchte ein dieses Stück weiter und fand diese Frage:

Weird behaviour of iframe `name` attribute set by jQuery in IE

Und ein relevantes Zitat aus der akzeptierten Antwort:

So was scheint, ist der Fall zu sein IE-up-to-7 leitet alle Verwendung von Attribute namens name auf eine ansonsten unsichtbare Eigenschaft um, intern submitName genannt, dass für Formularfelder ändern sich die Daten der Feld wird als Teil einer Form Vorlage erzeugen, die aber nicht ändert den richtigen Namen Attribut für HTMLCollection Indizierung verwendet, Radio-Gruppierung, getElementsByName, oder, im Falle von [i] Frames, Targeting.

Dies scheint bei jedem Element der Fall zu sein, das das Attribut name semantisch verwendet. Zum Beispiel:

So scheint es zu einer seltsamen Manifestation eines relativ alltäglichen IE-Bug, einfach so. Da Sie bereits einen Workaround haben, würde ich sagen, bleiben Sie dabei - aber mit etwas Glück kann jemand anderer mitkommen und dies etwas besser erklären.

+0

Vielen Dank für diese Untersuchung! Ich dachte, es war ein IE-Feature am Ende ... aber neugierig, warum – davidsleeps

+0

Sie bekommen +1 nur für die Untersuchung, Forschung und Einsicht. –

0

IE hat Probleme mit DOM-Einfügung. Wenn Sie dieses Format verwenden:

$('#someElement).appendTo("<map></map>").attr("name",somevar);

Ich glaube, Sie mehr Glück haben.