简单问题:
如果我想将$.each()
设置为自己的属性,如何在不使用html()
的情况下引用自我?
$('*[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?
答案 0 :(得分:13)
You can pass a function instead of a a string.
$('[rel]').html(function() {
return $(this).attr('rel');
});
您的所有示例之所以不起作用的原因是因为在每种情况下,您的代码在评估选择器之前很久就会执行。这是你真正需要理解的东西 - 当涉及回调时,它更具相关性,例如:对于AJAX或定时器:当你把代码放在某个地方时,它就会被执行。因此,无论foo(some code here)
做什么,foo
总是执行函数参数的一部分代码。避免这种情况的唯一原因是传递包含此代码的函数 - 即函数表达式被计算(其计算结果为可调用函数)。那么实际的函数(显然需要一个可调用的而不是一个简单的值)可以在适当的时候调用传递的函数。