2013-09-16 10 views
10

domanda semplice:jQuery selettore di riferimento a sé

Come mi riferisco ad auto senza usare $.each() per esempio quando voglio impostare html() di possedere attributi?

$('*[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

_Ha probabilmente non sa nemmeno come usare un computer_ :) – undefined

+1

Vota la domanda in sé, se non altro per l'umorismo in esso ... :) – TheCuBeMan

risposta

12

You can pass a function instead of a a string.

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

Il motivo per cui tutti i tuoi esempi non funzionano è perché in ogni caso il vostro codice viene eseguito molto tempo prima che il selettore è stato valutato. Questo è qualcosa che devi veramente capire - è ancora più rilevante quando sono coinvolti i callback, ad es. per AJAX o timer: quando inserisci il codice da qualche parte viene eseguito a questo punto. Quindi foo(some code here) sarà sempre esegue il codice che fa parte dell'argomento di funzione non importa cosa fa foo. L'unica ragione per evitarlo è passare una funzione che contiene questo codice - che è stata valutata l'espressione della funzione (che valuta una funzione callable). Quindi la funzione effettiva (che ovviamente deve aspettarsi un callable invece di un valore semplice) può invocare la funzione passata ogni volta che è appropriata.

+0

Ok. Capisco che js è basato su richiami, ma era sicuro che molto, molto tempo fa, in una terra molto, molto lontana, viveva una bella ragazza ... sì, e lei aveva un computer in cui sulla vecchia, vecchia versione di j, j, jQuery 'sender' o' self' ha funzionato. Ma potrei sbagliarmi con la ragazza, quando ero giovane ogni ragazza era bella. –

+0

Sì, penso che quella ragazza ti abbia fatto pensare a cose strane: è tecnicamente impossibile che ciò che hai suggerito abbia funzionato in quel modo. – ThiefMaster