Children "zerstören" Methode

user42

Grünschnabel
Hallo

folgende Situation:
previousSibling.children[0] oder previousSibling.childNodes[0]
machen die Veränderungen die in der Funktion passieren ungeschehen (zuweisen von einer Position für ein Div) sobald diese Codeschnipsel in der Funktion vorkommen.
Bsp:
var x = dummy.previousSibling.childNodes[0].currentStyle.width
Diese Zeile reicht aus um die Funktion zu ignorieren
x wird nicht weiter verwendet. Kommentiere ich die Zuweisung aus Funktioniert die Methode.
x enthält den gewünschten Wert! und die methode wird auch komplett durchlaufen!

Ich kann mir das verhalten nicht erklären! Vielleicht hat ja von euch jemand eine Idee.

Grüße
 
Hi,

hast du mal im Firefox in die Fehler-Konsole gesehen?
Benutzt du ein JS-Framework ?
Auf den ersten Blick kommt mir keine Idee.

Grüße
 
Danke für die schnelle Antwort!

Ja - die Konsole zeigt nichts
Nein - ich benutze kein Framework
Hehe so gehts mir auch :P
 
Hi,

vorstellen kann ich mir folgendes:

Bei dem Knoten, den previousSibling ermittelt, handelt es sich um eine Textknoten (die nodeType-Eigenschaft liefert 3 zurück). Dieser besitzt natürlich keine Kindelemente, deren Breite ermittelt werden kann.

Begründung:
Manche Browser, darunter auch der FF, behandeln einen Zeilenumbruch bereits wie einen Textknoten. Wird der Quellcode also formatiert geschrieben, muss der Code entsprechend angepasst werden. Andere Variante wäre das Schreiben der relevanten Codeteile in eine einzige Zeile.

Beispiel:
Code:
<html>
<head>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
function myFunc(objElem){
  // Testvariable (wenn grösser als Null, musste while-Schleife durchlaufen werden)
  var i=0;

  // Ersten vorherigen Knoten auf gleicher Ebene ermitteln
  var objTest = objElem.previousSibling;
  // Falls es sich nicht um einen Elementknoten handelt -> nächsten Knoten auf gleicher Ebene ermitteln
  while(objTest.nodeType != 1){
    objTest = objTest.previousSibling;
    i++;
  }
  // Browserabhängig die kalkulierte Breite bestimmen
  x = (window.getComputedStyle)? window.getComputedStyle(objTest.childNodes[0], null).getPropertyValue('width')
                               : objTest.childNodes[0].currentStyle.width;

  alert("Breite: " + x + "\nTestvariable i: " + i);
}
 //-->
</script>
</head>
<body>
<div>
  <div style="border: 1px solid #f00;"><p style="width: 321px;">Inhalt 1</p></div>
  <p onclick="myFunc(this);">Inhalt 2</p>
</div>
</body>
</html>

Beachte, dass auch child[0] aus dem gleichen Grund auf einen Textknoten zeigen kann.

Vielleicht hilft dir das weiter.

Ciao
Quaese
 
ufff - darauf muss man erstmal kommen :P

Du bist Hammer! vielen Dank!

:-)

wieso er aber in der Fehlerkonsole nichts zeigt ist komisch oder?
 

Neue Beiträge

Zurück