2009-05-06 35 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