我将假设当您尝试编写此代码时:
<div class="section " style="width:400px"></div>
$( ".section" ).html($(this).width());
您要做的是400px
在div.section
. 如果这就是你想要做的,那么这就是正在发生的事情:
这个说法:
$( ".section" ).html($(this).width());
如果 Javascript 或我知道的大多数其他语言在语法上等同于:
var newHTML = $(this).width();
$( ".section" ).html(newHTML);
如您所见,这不是 jQuery 问题,而是 JavaSciprt / 任何编程语言问题。您告诉浏览器将一个值传递给该.html()
方法,因此它必须首先在您调用该方法的函数范围内计算该值。在这种情况下,您是从window
or 全局范围(或其他一些未定义的范围)调用该方法,因此您永远不会得到您期望的结果。
简单的修复是这样的:
var section = $('.section');
section.html(section.width());
另一方面,有一些 jQuery 方法可以接受函数,在这种情况下,您似乎正在考虑这些方法。例如,如果您使用each
接受函数的方法,情况会略有不同:
$('.section').each(function(index, element){
$(this).html($(this).width());
});
在这种情况下,您将传入一个函数,然后 jQuery 将在您的选择器匹配的每个元素的范围内调用该函数。
最大的区别是要区分何时传入一个值和何时传入稍后将评估的函数。