14

简单的问题:

$.each()例如,当我想设置html()为自己的属性时,如何在不使用的情况下引用 self ?

$('*[rel]').html($(this).attr('rel')); // nope
$('*[rel]').html($(self).attr('rel')); // nah
$('*[rel]').html($(sender).attr('rel')); // undefined
$('*[rel]').html($(target).attr('rel')); // still undefined
$('*[rel]').html($(???).attr('rel')); // this isn't even correct syntax
$('*[rel]').html($(beer).attr('rel')); // well that would be tasty
$('*[rel]').html($(woman).attr('rel')); // not in this life
$('*[rel]').html($(god help me!).attr('rel')); // He probably doesn't even know how to use a computer
$('*[rel]').html($(i give up).attr('rel')); // unexpected... o'rly?
4

1 回答 1

16

您可以传递函数而不是字符串。

$('[rel]').html(function() {
    return $(this).attr('rel');
});

您的所有示例都不起作用的原因是,在每种情况下,您的代码在选择器被评估之前很久就执行了。这是你真正需要理解的东西——当涉及回调时,它甚至更相关,例如对于 AJAX 或计时器:当你将代码放在某个地方时,它会在此时执行。因此,无论做什么,都foo(some code here)始终foo执行作为函数参数一部分的代码。避免这种情况的唯一原因是传递包含此代码的函数 - 即计算函数表达式(计算为可调用函数)。然后实际的函数(显然需要一个可调用的而不是简单的值)可以在适当的时候调用传递的函数。

于 2013-09-16T18:04:40.383 回答