2016-11-30 40 views
1

我犯了一個錯誤,忘了一些代碼,我在寫使用屬性值:這個href javascript邏輯是如何工作的?

<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; 

,我很驚訝地看到,它仍然工作不管。

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

在擴展下面這個例子中,我覺得很奇怪,我並不需要針對使用路徑之前href屬性?它似乎假設我想從href屬性中獲取路徑名。

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

"/test-link/1"

+1

是的,這沒有任何意義。你是什​​麼意思*在使用路徑名*之前定位href屬性?你在哪裏做第一行? – BenM

回答

5

當您將錨元素爲一個字符串,你實際上得到href值,或者更準確地說「整個URL」,而不是outerHTML,你會與其他大多數元素,這就是爲什麼它的工作原理

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>

錨杆這種特殊的行爲在specification

HTMLHyperlinkElementUtils.toString()

返回一個包含整個URL一個USVString 規定。
它是URLUtils.href的同義詞,儘管它不能用於修改值。

+1

如何預測實際問題以產生正確答案令我驚歎! – JonSG

+0

對於任何混淆,我表示歉意,如果你能更好地解釋它,歡迎編輯這個問題。 這是非常整潔!謝謝 – jfox