jQuery选择器引用自我

简单的问题:

如果我想将html()设置为自己的属性,如何在不使用$.each()情况下引用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? 

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

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

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