2016-11-30 5 views
1

machte ich einen Fehler und vergessen, den Attributwert in einigen Code zu verwenden:Wie funktioniert diese Javascript-Logik? Ich schrieb

<a href="http://somesite.org/test-link/1" class="summary-title-link"></a> 

var link = document.getElementsByClassName("summary-title-link")[0], 
    ele = document.createElement("a"); 
ele.href = link; 

und ich war überrascht zu sehen, dass es unabhängig noch gearbeitet.

<a href="http://somesite.org/test-link/1"></a>

In Erweiterung mit diesem Beispiel unten, finde ich es seltsam, dass ich vor der Verwendung Pfadname nicht das Attribut href Ziel muss? es scheint irgendwie anzunehmen, dass ich den Pfadnamen vom href-Attribut haben möchte.

var link = document.getElementsByClassName("summary-title-link")[0].pathname; 

"/test-link/1"

+1

Ja, das macht keinen Sinn. Was meinst du mit * ziele auf das Attribut href, bevor du den Pfadnamen * verwendest? Wo machst du das in der ersten Zeile? – BenM

Antwort

5

Wenn Sie ein Ankerelement in eine Zeichenfolge konvertieren, erhalten Sie tatsächlich den href Wert, oder genauer gesagt „die ganze URL“ und nicht die Outerhtml wie bei den meisten anderen Elemente, das ist, warum es

var href = document.getElementsByClassName("test")[0]; // DOM element 
 

 
console.log(href.toString()); // gives you "http://google.com"
<a class="test" href="http://google.com">link</a>

arbeitet

Dieses spezielle Verhalten für Anker in der

HTMLHyperlinkElementUtils.toString()

Gibt ein USVString enthält die gesamte URLspecification

angegeben.
Es ist ein Synonym für URLUtils.href, obwohl es nicht zum Ändern des Werts verwendet werden kann.

+1

Wie Sie die tatsächliche Frage erraten, um die richtige Antwort zu produzieren, erstaunt mich! – JonSG

+0

Ich entschuldige mich für jede Verwirrung, Sie können gerne die Frage bearbeiten, wenn Sie es besser erklären können. Das ist ziemlich ordentlich! Vielen Dank – jfox

Verwandte Themen