假设我有这个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个循环,其中每个函数将一次性应用?
答案 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);
}