2009-05-06 13 views
1
$('.Schedule .Full input').each(function(i) 
{ 
     var controls = $('.Morning input, .MorningPart input, .Afternoon input, .AfternoonPart input', $(this).parents('.Schedule')); 
     alert(controls.length + " Conflicting Controls\n"+ 
       $(this).parents('.Schedule').attr('id') + " Parent"); 
}); 

Wenn ich diesen Code in Firefox laufe die erste Ausführung dieser Funktion erzeugt eine Warnung sagen folgenden:

17 Widersprüchliche Kontrollen
Montag Elternteil

die exakt gleiche Seite läuft in IE 6 oder 7 erzeugt eine Warnung sagen folgende:

45 Widersprüchliche Kontrollen
Montag Eltern

Firefox richtig ist, gibt es nur 17 in Konflikt Kontrollen. Die 45, die IE identifiziert, sind Steuerelemente, die kein Nachkomme von "Montag" sind. Wenn ich "Monday" als Kontext für die $() -Funktion angegeben habe, warum gibt IE Steuerelemente außerhalb davon zurück?

Antwort

1

Geben Sie diesem einen Versuch

var controls = $(this).parents('.Schedule').children('.Morning input, .MorningPart input, .Afternoon input, .AfternoonPart input') 
1

ich geändert Ihr Beispiel ein bisschen, weil meine Struktur ein wenig anders ist

$(this).parents('.RadioSchedule').children('.Morning, .MorningPart, .Afternoon, .AfternoonPart').find('input'); 

dies gearbeitet, um die gleichen Ergebnisse für IE und Firefox erzeugt

1
<div id="Monday" class="Schedule"> 
    <div class="Full"> 
     <div> 
      <input type="radio" name="MondayFullDay" checked="checked" value="none"/>None 
     </div> 
    </div> 
</div> 
<div id="Tuesday" class="Schedule"> 
    <div class="Full"> 
     <div> 
      <input type="radio" name="TuesdayFullDay" checked="checked" value="none"/>None 
     </div> 
    </div> 
</div> 

Okay, hier ist ein weiterer kniffliger Teil ... Sieht aus wie

$(this).parents('.Schedule'); 

gibt inkrementell mehr Ergebnisse zurück, wenn es ausgeführt wird. Wenn es das erste Mal für MondayFullDay ausgeführt wird, gibt es 1 Ergebnis zurück, aber sobald es zu TuesdayFullDay kommt, gibt es 2 Ergebnisse zurück. Dies ist nur in IE.

Da die obige xhtml-Struktur für diese Anwendung nicht optional ist, habe ich das DOM nur manuell durch aufeinanderfolgende Aufrufe von .parent() durchlaufen.

Ändern dieser

$(this).parents('.Schedule'); 

In diese

$(this).parent().parent().parent(); 

ich immer noch davon überzeugt bin, dass die Eltern() Methode funktioniert nicht, als ob dokumentiert ...

+0

Ich glaube .parents () gibt im Grunde die gesamte Struktur des Dokuments über dem aktuellen Knoten zurück, einschließlich des Body-Knotens der obersten Ebene. Dies ist vs .parent(), das nur die direkten Eltern zurückgibt. Wenn 'dies' der Eingabeknoten ist, haben Sie möglicherweise mehr Glück mit $ (this) .parent(). Parent(). Parent() (obwohl es ziemlich fugig aussieht und müsste geändert werden, wenn sich Ihre HTML-Struktur ändert) –

Verwandte Themen