2011-08-08 160 views
29

看完這篇文章net.tutsplus.com/tutorials/javascript-ajax/14-helpful-jquery-tricks-notes-and-best-practices/我得出的結論是,使用this.href更有效率。

但是,當我試圖在我的一個項目上使用它時,我看到this.href不僅返回href,而且還附加了網站的url。例如<a href="tab-04"></a>this.href將返回http://example.com/abc/tab-04$(this).attr('href')將僅返回tab-04。

你可以在這裏看到一個例子http://jsfiddle.net/UC2xA/1/

$(this).attr('href')然而,返回正是我所需要的,僅此而已。

我的問題是這樣的,我怎麼可以重寫(或做什麼是必要的)this.href,這樣只會返回標籤-04

編輯

道格你是正確的金錢與

this.getAttribute('href')

+4

如果你想要的精確值'href'屬性(硬編碼到HTML源代碼中),然後使用'$(this).attr('href')'。如果您需要完全限定的URL,請使用'this.href'。 –

+0

如果您將因爲效率而使用this.href,然後重寫它以使其「更多」;它種類擊敗目的。 – Joey

+0

-1爲「我得出結論,使用此.href更有效。」不,不是,但你肯定[優化太早](http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize)。即使存在,效率改變的可能性也幾乎爲零。 – Malvolio

回答

51

在純Javascript中的href屬性將具有附加的語義。它返回鏈接將導致的目標URL。不管它是如何寫入的(絕對或相對URL)。

當您使用$(this).attr("href")時,您正像其他任何屬性一樣直接檢索href屬性的值,因此它將返回呈現在HTML中的確切值。

對於你的情況的話,最好還是使用$(this).attr("href")

如果你不想使用jQuery,還有另一種解決方案,只使用普通的JavaScript:

this.getAttribute('href') 
1

document.getElementById(yourAnchorId).href.split("/")

[document.getElementById(yourAnchorId).href.split("/").length - 1].split("?")[0];

+0

嘿,布賴恩,我不能讓你的東西工作,但是,你可以請,提供一個鏈接到jsbin或jsfiddle,所以我會看到你是如何做到的? – user000001

+0

@ user744184 - 小提琴:http://jsfiddle.net/Yu7Q2/3/ – Brian

1

什麼,但有點子?

例如:

function getHref(a) 
{ 
    var i = a.outerHTML.indexOf('href="')+6; 
    return a.outerHTML.substring(i, a.outerHTML.indexOf('"', i)); 

} 

P.S TESTED!

+0

Yonathan Garti,請你提供一個鏈接到jsbin或jsfiddle,所以我會看你是如何做到的?因爲我似乎無法讓你的東西工作。至少還沒有。 – user000001

+0

http://jsbin.com/ajulaj - 點擊「測試我」 – ygaradon

+1

但我喜歡@Doug解決方案! – ygaradon