JS代码使IE9和Safari冻结,在Opera中不起作用?

时间:2012-08-26 03:46:34

标签: javascript jquery html html5 internet-explorer

我不知道为什么,但这段代码使得IE9和Safari崩溃,并且在Opera中根本不起作用。

$('#contentPage').on('DOMSubtreeModified', function(){
    if($(".iframey[date-current]").length){
    $(".iframey:not(.hidden)").prevUntil("iframe").addClass('smaller');
}});

如何使此代码适用于所有浏览器?

--- ---编辑

jsfiddle中的代码

http://jsfiddle.net/rzP5S/

使用chrome和firefox进行工作

2 个答案:

答案 0 :(得分:2)

您正在dom修改的事件处理程序中修改dom,您应该检查修改是否是由处理程序中的代码引起的,以防止无限循环。

另外

  

警告! DOMSubtreeModified事件类型在本规范中定义,以供参考和完整,但此规范不推荐使用此事件类型。

http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMSubtreeModified

答案 1 :(得分:0)

@Musa说的是正确的。有一个无限循环。你需要在DOMSubtreeModified处理它吗?你不能只是在点击事件中完成工作吗?这似乎表现得一样:

$(".onePost").live("click", function() {

    $(".onePost").removeClass('smaller');

    $("iframe")
        .addClass('hidden')
        .removeAttr('src')
        .removeAttr('date-current');

    $(this).nextAll("iframe:eq(0)")
        .removeClass('hidden')
        .removeAttr('style')
        .attr({src: $(this).data('href')})
        .attr('date-current', 'here');

    if($(".iframey[date-current]").length){
        $(".iframey:not(.hidden)").prevUntil(".iframey").addClass('smaller');
    }
});

http://jsfiddle.net/rPPSj/