2013-09-16 9 views
10

Einfache Frage:jQuery-Selektor Bezug auf Selbst

Wie erreiche ich selbst beziehen, ohne $.each() zum Beispiel zu verwenden, wenn ich html() festlegen möchten Attribut besitzen?

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

_Er weiß wahrscheinlich nicht einmal, wie man einen Computer benutzt_ :) – undefined

+1

Für die Frage selbst, wenn nur für den Humor in abstimmen ... :) – TheCuBeMan

Antwort

12

You can pass a function instead of a a string.

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

Der Grund, warum alle Ihre Beispiele funktionieren nicht, weil in jedem Fall ist der Code ausgewertet wurde, lange bevor der Selektor ausführt. Dies ist etwas, was Sie wirklich verstehen müssen - es ist noch relevanter, wenn Rückrufe involviert sind, z. für AJAX oder Timer: Wenn Sie Code irgendwo platzieren, wird es an diesem Punkt ausgeführt. So foo(some code here) wird immer führen Sie den Code, der Teil der Funktion Argument ist, egal was foo tut. Der einzige Grund, dies zu vermeiden, besteht darin, eine Funktion zu übergeben, die diesen Code enthält - das war der Funktionsausdruck, der ausgewertet wird (was zu einer aufrufbaren Funktion führt). Dann kann die eigentliche Funktion (die offensichtlich einen aufrufbaren anstelle eines einfachen Werts erwarten muss) die übergebene Funktion aufrufen, wann immer es angemessen ist.

+0

Ok. Ich verstehe, dass js auf Rückrufen basiert, war aber sicher, dass vor langer, langer Zeit, in einem Land weit, weit weg, dort lebte ein schönes junges Mädchen ... ja, und sie hatte Computer in denen auf alten, alten Version von j, j, jQuery 'sender' oder' self' hat funktioniert. Aber ich kann mich in Bezug auf das Mädchen irren, als ich jung war, war jedes Mädchen wunderschön. –

+0

Ja, ich denke, dieses Mädchen hat dich dazu gebracht, komische Dinge zu denken - es ist technisch unmöglich, dass das, was du vorgeschlagen hast, jemals so funktioniert hat. – ThiefMaster