14

簡単な質問:

独自の属性$.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?
4

1 に答える 1

16

文字列の代わりに関数を渡すことができます。

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

すべての例が機能しない理由は、いずれの場合も、セレクターが評価されるずっと前にコードが実行されるためです。これは本当に理解しておく必要があることです。AJAX やタイマーなどのコールバックが関係している場合はさらに重要です。コードをどこかに配置すると、その時点でコードが実行されます。そのため、関数の引数の一部であるコードfoo(some code here)常にfoo実行されます。これを回避する唯一の理由は、このコードを含む関数を渡すことです。つまり、関数式が評価されます (呼び出し可能な関数に評価されます)。次に、実際の関数 (単純な値ではなく呼び出し可能なものを期待する必要があることは明らかです) は、適切なときにいつでも渡された関数を呼び出すことができます。

于 2013-09-16T18:04:40.383 に答える