2013-02-20 1 views
5

ich diese exemple für haben:Warum "das" Argument in jQuery href mit Ankern gibt

<div id="example"> 
    <a href="http://www.google.com/#1">Hello</a> 
    <a href="http://www.google.com/#4">Hello</a> 
</div> 

Und diese zwei Linie von jQuery:

jQuery("a").filter(function() { 
    console.log(""+this+"") 
}); 

Returns:

http://www.google.com/#1 

http://www.google.com/#4 

Aber

jQuery("a").filter(function() { 
    console.log(this); 
}); 

Returns

<a href="http://www.google.com/#1">Hello</a>​ 

<a href="http://www.google.com/#4">Hello</a>​ 

Warum die Linie 2, das HREF-Attribut des Ankers zurück, wenn "das Argument ein "string" hinzufügen? Die jQuery docs sagt, wenn ein Filterfunktionsargument hat, die "this" is the current DOM element

+0

Wenn Sie sagen, "Returns", meinst du, dass das ist, was Sie in der Browser-Konsole von den 'console.log()' Anrufe sehen? (Ich denke, es ist was du meinst ...) – Pointy

+0

Hast du diese 2 Ergebnisse falsch herum geschrieben? "" + this + "" sollte den Wert von href zurückgeben - http://jsfiddle.net/9muyj/ –

+0

Ja, die Ergebnisse sind invertiert. –

Antwort

12

""+this zu this.toString() entsprechen. Auf einem a Element gibt es die href (ja, das ist komisch, und wahrscheinlich für die Kompatibilität mit etwas, das vor war, nützlich eine lange Zeit, aber das ist, was es tut auf allen Browsern).

Im zweiten Fall rufen Sie nicht toString an, sondern die vom Browser abhängige Konsolenformatierung. Es wurde eine andere Auswahl getroffen: In Chrome wird normalerweise der äußere HTML-Code zurückgegeben (als durchsuchbarer Baum, wenn er groß ist).

+0

Gibt es eine Spezifikation für die Rückgabe des 'href'? Als ich anfing, meine Antwort zu schreiben (die ich dann zugunsten deiner aufgegeben habe), wollte ich sagen, dass sie auch von der Implementierung abhängig war - aber ich bin mir nicht sicher. – Bergi

+0

Ich habe keine Spezifikation gefunden, aber es ist eine Art (kleine) bekannte Tatsache und es ist scheinbar universell. Der alte Grund ist wahrscheinlich lachhaft und ich würde es gerne wissen ... –

+0

http://www.w3.org/html/wg/drafts/html/master/text-level-semantics.html#the-a- Element "stringifier" ist die href und das Ziel, wenn es nicht existiert. –