2012-04-11 10 views
0

Ich versuche, Javascript zu verwenden, um die untergeordneten Elemente eines Knoten für Erwachsene zu durchlaufen und Eigenschaften nach Bedarf zu ändern. Der Code hängt auf dem elemtree.tagName auf und gibt an, dass das Objekt diese Eigenschaft nicht besitzt. Ich habe über DOM-Eigenschaften gelesen, und TagName wurde als eine Eigenschaft des DOM angegeben. Warum sollte es nicht erkannt werden?DOM Kind Tagname

Code unten:

elemtree = elem.firstChild; 
    while (elemtree != null) { 
     if (elemtree.tagName.toLowerCase() == "img") { 
      elemtree.src = img; 
     } 
     else { 
      elemtree.display = display; 
     } 
     elemtree = elemtree.nextSibling; 
    } 

Antwort

2

elemtree.nextSibling enthält text- und kommentieren-Knoten, die eine nodeName haben aber keine tagName Eigenschaft.

Lösungen:

  1. Verwenden elem.firstElementChild und elemtree.nextElementSibling statt (mögliche Browser Kompatibilitätsprobleme).
  2. Verwenden Sie nodeName anstelle von tagName.
  3. prüfen für die Existenz von tagName bevor sie mit:

    if (elemtree.tagName && elemtree.tagName.toLowerCase() == "img") { 
    
+0

Danke. Ich wusste nicht einmal, dass ich Textknoten in meiner HTML-Struktur hatte. Es war ein langer Tag. – steventnorris

+0

Anstatt alle Knoten zu durchlaufen, verwenden Sie besser ['var imgs = elem.getElementsByTagName ('img');'] (https://developer.mozilla.org/de/DOM/element.getElementsByTagName) und loop durch 'imgs'. –

+0

Ich muss sowieso alle Elemente ändern. Sie sind display = 'None' und müssen display = 'block' oder umgekehrt sein, mit Ausnahme des Bildes. Es braucht nur seine src geändert. Es ist eine einfache Baumansicht, die ich aufgepeitscht habe. – steventnorris

0

ich mit Rob W einig, dass die beste Lösung Knoten ohne die Gegenstände zu vermeiden, mit zu beginnen, aber könnten Sie auch prüfen, Wechsel:

if (elemtree.tagName.toLowerCase() == "img")

zu

if (elemtree.tagName && elemtree.tagName.toLowerCase() == "img")

Auf diese Weise wird der Fehler nicht ausgegeben, wenn die Eigenschaft nicht existiert.