Patrick: Problem mit childNode

Hi Forum,

also ich erstelle einen ChildNode in dieser Form:

var newElement = 'MEIN CODE';
var newLi = document.createElement("li");
newLi.setAttribute("name","scroll_"+winCounter);
document.getElementById("innerScroll").appendChild(newLi);
newLi.innerHTML = newElement;

Das klappt im FF und IE.

Fürs löschen nehm ich das:

var toDestroy = document.getElementsByName("scroll_"+windowID)[0].firstChild;
document.getElementsByName("scroll_"+windowID)[0].removeChild(toDestroy);

Im FF klappt das auch wunderbar.
Nur der IE bringt Fehler und führt das Destroyen nicht aus.
IE7 meldet: document.getElementsByName(...).0.firstChild ist Null oder kein Objekt
Code: 0

Hat da jemand vielleicht eine Idee, wie ich das umschiffen kann?

Danke
Patrick

  1. ersetze

    newLi.setAttribute("name","scroll_"+winCounter);

    durch
    newLi.name="scroll_"+winCounter);

    oder nimm stattdessen eine Id
    newLi.id="scroll_"+winCounter);
    um die komplizierte Syntax zum Aufruf über getElementsByName zu vermeiden.

    1. Hi,

      sorry, das haut nicht hin.
      Wenn ich mein setAttribute durch newLi.name ersetzen, gehts es nicht, da hat der FF ein Problem.

      Patrick

      1. Wenn ich mein setAttribute durch newLi.name ersetzen, gehts es nicht, da hat der FF ein Problem.

        und außerdem hat der FF eine hervorragende Fehlerkonsole -  was meldet die denn?

        Zudem: warum nimmst du keine ID?

      2. Hallo,

        sorry, das haut nicht hin.
        Wenn ich mein setAttribute durch newLi.name ersetzen, gehts es nicht, da hat der FF ein Problem.

        Das Problem besteht darin, dass du einem Element ein Attribut zuweisen willst, welches es eingetlich nicht besitzen darf (s. <http://de.selfhtml.org/html/referenz/attribute.htm#li@title=Attributreferenz: li>).
        Falls der Name nur 1x in deinen Dokument vorkommt, kannst du IDs verwenden.
        Möchtest du mehrere Elemente dieser Art verwenden, um später alle hintereinander löschen zu können, solltest du entweder Klassen verwenden (und später alle <li>s durchlaufen, abfragen und löschen) oder, was performanter ist, die Referenzen dieser Elemente in einem Array speichern, auf das du dann beim Löschen zugreifst.

        mfg. Daniel

  2. Hallo,

    var newLi = document.createElement("li");
    newLi.setAttribute("name","scroll_"+winCounter);

    das kann der IE nicht, jedenfalls kannst du danach nicht das Element über eine Namencollektion ansprechen. Er versteht es nur so:

    var newLi = document.createElement("li name='xy'");

    http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createelement.asp lese dort bei dyn. erzeugtem Name-Attribut weiter.

    var toDestroy = document.getElementsByName("scroll_"+windowID)[0].firstChild;
    document.getElementsByName("scroll_"+windowID)[0].removeChild(toDestroy);

    sicherer wäre:

      
    var toDestroy = document.getElementsByName("scroll_"+windowID)[0].firstChild;  
    toDestroy.parentNode.removeChild(toDestroy);  
    
    

    Gruß plan_B

    --
         *®*´¯`·.¸¸.·
  3. Hi,

    danke erst mal für die Infos!
    Ich muss nicht unbedingt ein li nutzen.
    Ich werde es mal mit einer Tabelle versuchen und dann hier berichten.

    Danke
    padde

    1. Ich werde es mal mit einer Tabelle versuchen und dann hier berichten.

      bedenke: Tabellen kennen auch kein name-Attribut
      und
      wens keine tabellarischen Daten sind ist eine Tabelle fehl am Platz