jQuery用链接做了多少循环?

时间:2015-11-05 11:46:30

标签: jquery

假设我有这个jQuery代码:

$(document).ready(function () {
    $("#bt").show();
    $("#bt2").hide();

    $("#bt,#bt2").click(function () {
        $(".box1").toggleClass("box1-change");
        setTimeout(function () {
            $(".box1").toggleClass("box1-change");
        }, 1500);

        $("#bt").hide();
        $("#bt2").show();
    });
});

假设$('.popUp').width(300).height(300).text('Hi!').fadeIn(1000); 有50个元素。 .popUp将遍历这50个元素并应用适当的属性值。

我的问题是:那会发生什么?当width(300)时间开始运行时,是否重新开始(新循环)并再次应用属性值?

后台发生了什么?在这个特定的例子中,是否会有4个循环(因为有4个函数)或1个循环,其中每个函数将一次性应用?

1 个答案:

答案 0 :(得分:1)

是的,jQuery将循环遍历所有元素并设置宽度,然后再次循环它们并设置高度。

jquery's access function的源代码中,您可以看到在所选的每个元素上运行该循环的位置。

if ( fn ) {
    for ( ; i < len; i++ ) {
        fn(
            elems[ i ], key, raw ?
            value :
            value.call( elems[ i ], i, fn( elems[ i ], key ) )
        );
    }
}

访问方法最终需要设置高度和宽度。

// Multifunctional method to get and set values of a collection
// The value/s can optionally be executed if it's a function

我通过在控制台中执行以下操作来调试调试器来实现此目的。

var height = $.fn.height;
$.fn.height = function() {
    debugger;
    return height.apply(this, arguments);
}