ChrisB: Nachtrag: Option unterhalb von Optgroup

Beitrag lesen

Hi,

auch wenn ich es so versuche, ändert sich leider nichts am Verhalten

var optGrps = opt.getElementsByTagName("optgroup");

var newOption = document.createElement("option");
newOption.value = "Test1";
newOption.text = "Test1";
for (var i = 0; i < optGrps.length; i++){
  if(optGrps[i].label == "Test"){
    optGrps[i].appendChild(newOption);
  }
}

  

> Internet Explorer 7.0.5730.13 (Windows) und Internet Explorer 8.0.6001.18702 (Windows): die Elemente werden an der richtigen Stelle eingefügt, jedoch ohne Text  
  
Der IE ist immer leicht bitchy beim Erstellen neuer Formularelemente.  
  
Wenn du  

> newOption.text = "Test1";  

durch  
`newOption.appendChild(document.createTextNode("Test1"));`{:.language-javascript}  
ersetzt, bekommst du auch im IE eine Option mit dem gewünschten Textinhalt.  
  
  

> Opera 9.64 (Linux und Windows): hat das beschriebene Verhalten  
  
Auch lustig - eine Kontrollausgabe des innerHTML der OPTGROUP direkt nach dem appendChild zeigt an, dass die neue Option korrekt dort eingehängt wurde - und trotzdem zeigt er sie im nächsten OPTGROUP-Element \*an\*.  
  
Um das zu beheben, kannst du hinter der appendChild-Zeile noch  
`if(window.opera) optGrps[i].innerHTML = optGrps[i].innerHTML;`{:.language-javascript}  
einfügen - einfach dem OPTGROUP-Element, dem die neue Option gerade angehängt wurde, sein eigenes innerHTML noch mal überbraten. Dann zeigt auch Opera die Option in der "richtigen" OPTGROUP an, und nicht mehr in der nachfolgenden.  
  
Natürlich kein besonders schöner Workaround, aber was will man machen :-)  
Musst nur aufpassen - eventuell gesetzte Eventhandler o.ä. gehen dir verloren, wenn du innerHTML überschreibst. (Aber die nutzt man auf OPTION ja generell eher selten.)  
  
  
MfG ChrisB  
  

-- 
Light travels faster than sound - that's why most people appear bright until you hear them speak.