jquery $函数在IE中返回不同的结果

时间:2009-05-06 16:53:11

标签: javascript jquery

$('.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会将控件返回到它之外?

3 个答案:

答案 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()方法没有按照记录的方式工作......