Ответ 1
Вы можете передать функцию вместо строки.
$('[rel]').html(function() {
return $(this).attr('rel');
});
Причина, по которой все ваши примеры не работают, заключается в том, что в каждом случае ваш код выполняется задолго до того, как селектор был оценен. Это то, что вам действительно нужно понять - это еще более актуально, когда задействованы обратные вызовы, например. для AJAX или таймеров: когда вы помещаете код где-то, он выполняется в этот момент. Таким образом, foo(some code here)
будет всегда выполнять код, являющийся частью аргумента функции, независимо от того, что делает foo
. Единственная причина избежать этого - передать функцию, содержащую этот код - это выражение функции оценивается (которое оценивается вызываемой функцией). Тогда фактическая функция (которая, очевидно, должна ожидать вызываемого вместо простого значения) может вызывать переданную функцию всякий раз, когда она подходит.