bleicher: geisterobjekte?

Grüße,

Problem: wenn ich childNodes vom div mit id="tab1" einfordere (HTML dazu siehe unten), sind 3 leere objekte ("object Text") dabei.

was mache ich falsch, und wie kriege ich es sauber? die idee war die funktion "getByName" zu bastlen, die ein Objekt und Name bekommt:

  
function getByName(o,n){  
	var i=0, p=0;  
	var drags=new Object();  
	var children=o.childNodes;  
			for(i=0;i<children.length;i++){  
				if(children[i].getAttribute("name")==n){  
  
					drags[p]=children[i];  
					p++;  
				}  
					i++;  
			}  
	return drags;  
}  
  

die Zeile if(children[i].getAttribute("name")==n){ führt aber zu Fehlermeldungen, da diese "Geisterobjekte" die Eigenschaft anscheinend gar nicht haben. kann man die irgendwie herausfischen?

gegeben ist dies Stück:

  
<div class="tab" name="pool" id="tab1">  
<div name="drag" class="drag"><ol>  
	<li>Aber Kay, der kleine Kay! fragte Gerda. Wann kam er? Befand er sich unter der Menge?</li>  
	<li>Eil mit Weile! nun sind wir gerade bei ihm! Am dritten Tage kam eine kleine Person, weder mit Pferd, noch mit Wagen, ganz lustig und guter Dinge gerade auf das Schloss hinaufspaziert. Seine Augen blitzten wie deine, er hatte prachtiges langes Haar, aber sonst armliche Kleider.</li>  
	<li>Da war Kay! jubelte Gerda. O, dann habe ich ihn gefunden und dabei klatschte sie in die Hande.  
</li>  
	<li>Er hatte einen kleinen Ranzen auf seinem Rucken! sagte die Krahe.</li>  
	<li>Nein, das war sicherlich sein Schlitten! sagte Gerda, denn damit ging er fort!</li>  
</ol>  
</div>  
</div>

MFG
bleicher

--
__________________________-

FirefoxMyth
  1. Grüße,

    Guten Morgen,

    Problem: wenn ich childNodes vom div mit id="tab1" einfordere (HTML dazu siehe unten), sind 3 leere objekte ("object Text") dabei.

    Du hast Text in dem tab1-div :) Whitespaces! Der Wagenrücklauf zählt als Kind. Da das erste Kind bereits ein Textknoten ist bricht dein Script ab.
    Warum das zweite Kind allerdings auch ein Textknoten ist verstehe ich nicht o.0

    if(children[i].getAttribute("name")==n){
    <div name="drag" class="drag">

    <http://de.selfhtml.org/html/referenz/attribute.htm#div@title=Ach ja und <div> kennt kein name-Attribut> sondern nur align, class, id, style und title.

    --
    sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
    1. Grüße,
      und wie geht man damit um? es muss doch möglich sein, die gewünschten nodes aus dem gegebenen object rauszuholen?

      MFG
      bleicher

      --
      __________________________-

      FirefoxMyth
      1. Grüße,
        und wie geht man damit um? es muss doch möglich sein, die gewünschten nodes aus dem gegebenen object rauszuholen?

        Nunja du könntest deine Funktion um eine Knotentyp-Prüfung erweitern:

          
        function getByName(o,n){  
          var i=0, p=0;  
          var drags=new Object();  
          var children=o.childNodes;  
              for(i=0;i<children.length;i++){  
               if(children[i].nodeType == 1) { //neu  
                if(children[i].getAttribute("class")==n){ // <<== class statt name  
                  drags[p]=children[i];  
                  p++;  
                }  
               } //neu  
                  i++;  
              }  
          return drags;  
        }
        

        Damit sollte eigentlich ausgeschlossen sein, dass Textknoten gegriffen werden.
        Das Problem mit dem name-Attribut kannst du umgehen indem du class nimmst, was ja scheinbar eh den gleichen Inhalt hat, habe ich oben schon so gemacht

        --
        sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
        1. Grüße,
          danke -werde ich machen^^ aber anscheinend ist der Ansatz als solcher falsch - die Funktion gibt nämlich immer einen leeren Objekt zurück ;(
          MFG
          bleicher

          --
          __________________________-

          FirefoxMyth