2009-05-06 40 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"); 
}); 

當我在Firefox中運行該代碼這個函數的第一個執行產生一個警告框,說以下內容:

17衝突控制
週一父

在IE 6或7所述的完全相同的頁面運行產生一個警告框說以下內容:

45衝突控制
星期一家長

Firefox是正確的,只有17個衝突的控件。 IE正在識別的45個控件不是「星期一」的後代。如果我已經將「Monday」指定爲$()函數的上下文,那麼爲什麼IE將控件返回到它之外?

回答

1

試試這個

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

我修改您的例子一點,因爲我的結構是一個有點不同

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

這個工作產生跨越IE和Firefox

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> 
相同的結果

好吧,這裏還有一個棘手的部分...看起來像

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

在執行時會逐漸返回更多結果。因此,當它執行第一次爲MondayFullDay它返回1結果,但一旦它到達TuesdayFullDay它返回2結果。這隻在IE中。

因爲上面的xhtml結構對於這個應用程序來說不是可選的,所以我最終通過連續調用.parent()來手動遍歷DOM。

更改此

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

進入這個

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

我仍然相信,父母()方法是行不通的,彷彿記錄...

+0

我相信。家長( )將基本上返回包括頂級主體節點的當前節點之上的文檔的整個結構。這是vs .parent(),它只會返回直接的父對象。 ()this.parent()。parent()。parent()(雖然它看起來非常難看,如果你的html結構發生變化,需要改變它),如果'this'是輸入節點, – 2009-05-06 18:33:10