$('.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会将控件返回到它之外?
答案 0 :(得分:1)
试一试
var controls = $(this).parents('.Schedule').children('.Morning input, .MorningPart input, .Afternoon input, .AfternoonPart input')
答案 1 :(得分:1)
我修改了你的例子,因为我的结构有点不同
$(this).parents('.RadioSchedule').children('.Morning, .MorningPart, .Afternoon, .AfternoonPart').find('input');
这在IE和Firefox上产生了相同的结果
答案 2 :(得分: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();
我仍然确信parent()方法没有按照记录的方式工作......