2012-03-31 15 views

Antwort

2

Der Grund, warum Ihr erstes Beispiel funktioniert, ist, dass tr und td Elemente nur in einem table Element gültig sind. Der Browser Streifen effektiv diese ungültigen Tags im DOM aus, die Sie mit einer Struktur ähnlich läßt:

<body> 
    <input type="input" size="3" class="qta"> 
    <input type="input" size="7" class="price"> 
    TOTALE: <input type="input" id="total" size="7" ;=""> 
</body> 

es in Firebug oder Webkit Inspector Check out.

Der Selektor next() funktioniert hier, weil input.price das unmittelbar folgende gleichgeordnete Element jedes Elements in der Menge der übereinstimmenden Elemente ist.

Sobald Sie ein Einwickeln table Elemente umfassen, die tr und td Elemente gültig in der Struktur und in dem DOM gestellt bekommen, wie man erwarten würde:

<body> 
    <table width="520" border="0" align="center" cellpadding="3" cellspacing="0"> 
     <tbody> 
      <tr> 
       <td width="40" bgcolor="#009966" class="whyte"> 
        <input type="input" size="3" class="qta"> 
       </td> 
       <td width="100" bgcolor="#009966" class="whyte"> 
        <input type="input" size="7" class="price"> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
    TOTALE: <input type="input" id="total" size="7" ;=""> 
</body> 

Diese den next() Selektor brechen, weil input.price ist nicht mehr das unmittelbar folgende Geschwister jedes Elements in der Menge der übereinstimmenden Elemente.

Die Lösung ist Ihre jQuery-Selektor ändern für input.price die neue Struktur zu navigieren:

price = self.parents('tr').find(".price"), 

Ihre fiddle aktualisiert.

1

Die .next() selector funktioniert nur für Geschwister im aktuellen Element. Nicht sicher, warum es in Ihrem ersten Beispiel funktionierte ...

Ich verzweigte Ihre Geige (http://jsfiddle.net/vansimke/n3W4F/) und fügte einige Navigation hinzu, um zum übergeordneten Tag zu gehen, zum nächsten zu gehen und dann das ".price" -Element zu finden Innerhalb. Sehen Sie, ob es das tut, was Sie wollen.

+0

Wahr, danke !! – Geme

0

Die nächste Funktion betrachtet nur die unmittelbar folgenden Geschwister. Da jede Eingabe in einem td-Tag umschließen wird, haben sie keine unmittelbaren Geschwister, so die

self.next(".price") 

Wähler nichts zurückgibt. Man könnte so etwas wie

self.parents('tr').find(".price"). 

Ich bin nicht so sicher, warum der erste Schnipsel funktioniert verwenden. Wenn Sie die Eltern der Eigenvariablen untersuchen (self.parents(). Foreach (...)), sind die Eltern HTML -> BODY -> INPUT. Ich vermute, dass, weil die TR/TD nicht in einem TABLE-Element eingeschlossen sind, die Eingabe-Tags stattdessen Kinder von BODY werden? Jemand anderes könnte eine bessere Erklärung für dieses Verhalten haben.