0

我不知道为什么,但是这段代码使 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中的工作格栅

4

2 回答 2

2

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

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

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

于 2012-08-26T03:55:40.050 回答
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/

于 2012-08-26T06:03:00.027 回答