Felix Riesterer: [object HTMLliElement] ie streikt

Beitrag lesen

Lieber Chris,

ich weiß zwar noch immer nicht was ein ArrayList-Objekt ist und kann, aber das nur nebenbei.

Was mich insgesamt verunsichert, ist die Tatsache, warum Du <li>-Elemente aus einer <ul> entfernst, um dann diese Elemente wieder einzufügen. Wäre es nicht sinnvoller, mittels einer per JavaScript zugewiesenen Klasse diese <li>-Elemente einfach zu "behandeln"? Damit kannst Du ausgewählten <li>-Elementen eine bestimmte Klasse zuweisen, während die restlichen eine andere Klasse erhalten.

Ich versuche einmal deine Funktion zu verstehen:

function initArrayListS(intID) {  
  arrListS = new ArrayList();  
/* Wie gesagt, dieses Objekt ist mir fremd. ArrayList gehört nicht zum regulären Sprachumfang von JavaScript... */  
  
  var getListNodes = document.getElementById('serveritemCarrier');  
/* Warum nennen wir das gemeinte HTML-Elementobjekt hier nicht auch "ulContainer", so wie später? Das hilft, Deinen Code zu verstehen... */  
  
  if(getListNodes) {  
    for(var i=0;i<getListNodes.childNodes.length;i++) {  
/* Warum nicht so?  
    var listNodes = document.getElementById("serveritemCarrier").getElementsByTagName("li");  
Da kann man jetzt auch durch die gefundenen <li>-Elemente durchiterieren. Das ist auch für einen "Außenstehenden" schneller begreifbar. */  
  
      if(getListNodes.childNodes[i].id) {  
/* Aha, die Teile müssen eine passende ID haben? Gibt es darinnen denn auch <li>-Elemente, die ausscheiden? */  
  
        if(getListNodes.childNodes[i].id.split("_")[0] == "slide") {  
/* Anscheinend... nur wenn da "slide_xyz..." in der ID steht, werden sie genommen... */  
  
          arrListS.add(getListNodes.childNodes[i]);  
/* Das ist eine Methode des ArrayList-Objektes, das ich ja nicht kenne... */  
  
          getListNodes.removeChild(getListNodes.childNodes[i]);  
/* Warum entfernst Du hier das <li>-Element, wenn Du doch später mit innerHTML eh alles platt machst? Das ist in meinen Augen unnötig. */  
  
          i=i-1;  
/* Tja, das bräuchtest Du nicht, wenn Du mit getElementsByTagName arbeitetest und anschließend die Elemente nicht einzeln entferntest. */  
  
        }  
      }  
    }  
  
  }  
  
  displayListS(actFirstNodeS);  
/* Woher kommt diese Funktion? Und was ist "actFirstNodeS"? */  
}

Vielleicht ist Dein Ansatz hier tatsächlich nicht anders lösbar, aber mir scheint doch sehr, dass Du in der <ul id="serveritemCarrier"> eher die nichtbenötigten Elemente entfernen solltest, um nur die benötigten zu belassen (das bedeutet auch, nicht-<li>-Elemente wie Textnodes aus der <ul> zu entfernen!), und um diese dann dynamisch mit Klassen zu versehen. Das sollte dann auch im dümmsten Browser wie dem IE klappen.

Liebe Grüße aus Ellwangen,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)