巧方法 JavaScript獲取超鏈接的絕對(duì)URL地址
對(duì)于Web程序員來(lái)說(shuō),處理簡(jiǎn)單的URL格式也許會(huì)成為一場(chǎng)噩夢(mèng)。試想一下,一個(gè)網(wǎng)址里有很多組成部分都會(huì)影響你對(duì)它的解析方法:
····是否以/字符開(kāi)頭
····是否以//開(kāi)頭
····是否以?號(hào)開(kāi)頭
····是否以#號(hào)開(kāi)頭
…等等
當(dāng)你想要這個(gè)地址的絕對(duì)地址時(shí),如何判斷處理和解析?它有可能是http協(xié)議的,還可能是https協(xié)議的。夠頭痛吧。幸運(yùn)的是,我們有個(gè)簡(jiǎn)單的方法來(lái)確定它的絕對(duì)地址,就是創(chuàng)建一個(gè)A元素來(lái)輔助完成這個(gè)任務(wù)!
JavaScript代碼
這里我將使用一個(gè)返回函數(shù)的JavaScript函數(shù),這樣做有很多好處,下面會(huì)講。
var getAbsoluteUrl = (function() { var a; return function(url) { if(!a) a = document.createElement('a'); a.href = url; return a.href; }; })();
這個(gè)函數(shù)看起來(lái)有些復(fù)雜,它先將一個(gè)函數(shù)賦予一個(gè)變量,而這個(gè)函數(shù)里有另外一個(gè)函數(shù),還有一個(gè)預(yù)先定義的變量。有人可能會(huì)問(wèn),為什么要內(nèi)嵌一個(gè)函數(shù),是否可以簡(jiǎn)化成這樣:
var getAbsoluteUrl = function(url) { var a = document.createElement('a'); a.href=url; return a.href; }
當(dāng)然這種簡(jiǎn)單的寫(xiě)法也不能算錯(cuò),但不夠完美,因?yàn)閮?nèi)嵌一個(gè)函數(shù)的做法雖然增加了代碼的復(fù)雜度,但它能保證A元素只被創(chuàng)建一次,而且可以重復(fù)利用,這樣節(jié)省了時(shí)間和內(nèi)存。
也許有人會(huì)提出另外一個(gè)問(wèn)題,疑惑嵌套的第二個(gè)函數(shù)里有個(gè)if判斷,為什么需要它,干嘛不寫(xiě)成下面這樣:
var getAbsoluteUrl = (function() { var a = document.createElement('a'); return function(url) { a.href = url; return a.href; }; })();
這自然也是一種可以運(yùn)行的寫(xiě)法,而且功能不會(huì)有任何錯(cuò)誤。但微妙的是,如果沒(méi)有if判斷語(yǔ)句,在定義這個(gè)函數(shù)的時(shí)候,即使這個(gè)函數(shù)沒(méi)有被任何代碼調(diào)用,A元素也會(huì)被初始化,而有了if判斷語(yǔ)句,A元素會(huì)在被實(shí)際用到時(shí)才被創(chuàng)建,不會(huì)浪費(fèi)內(nèi)存和CPU。
好了,有了這個(gè)方法,不論你傳入它的是什么樣的URL地址,它都會(huì)返回絕對(duì)地址。
大家試一下吧!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript和jquery獲取父級(jí)元素、子級(jí)元素、兄弟元素的方法
本文給大家簡(jiǎn)單總結(jié)了下JavaScript和jquery獲取父級(jí)元素、子級(jí)元素、兄弟元素的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2016-06-06javascript下用ActiveXObject控件替換word書(shū)簽,將內(nèi)容導(dǎo)出到word后打印
由于時(shí)間比較緊,沒(méi)多的時(shí)候去學(xué)習(xí)研究上述工具包,現(xiàn)在用javascript操作ActiveXObject控件,用替換word模板中的書(shū)簽方式解決。2008-06-06JS手搓P(guān)romise的常見(jiàn)方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了JavaScript中手寫(xiě)Promise的一些常見(jiàn)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-09-09JavaScript創(chuàng)建命名空間(namespace)的最簡(jiǎn)實(shí)現(xiàn)
JavaScript創(chuàng)建命名空間(namespace)通過(guò)自定義函數(shù)進(jìn)行類型判斷、數(shù)組遍歷、函數(shù)執(zhí)行等相關(guān)操作來(lái)實(shí)現(xiàn)命名空間的功能,需要的朋友可以參考一下2007-12-12淺談laytpl 模板空值顯示null的解決方法及簡(jiǎn)單的js表達(dá)式
今天小編就為大家分享一篇淺談laytpl 模板空值顯示null的解決方法及簡(jiǎn)單的js表達(dá)式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09詳解JavaScript中Proxy與Object.defineProperty的區(qū)別
Proxy和Object.defineProperty都是JavaScript中用于實(shí)現(xiàn)對(duì)象屬性攔截和代理的機(jī)制,但它們?cè)诠δ芎蛻?yīng)用方面有一些區(qū)別,本文通過(guò)代碼示例詳細(xì)介紹了二者的區(qū)別,感興趣的朋友可以參考下2023-06-06js實(shí)現(xiàn)人才網(wǎng)站職位選擇功能的方法
這篇文章主要介紹了js實(shí)現(xiàn)人才網(wǎng)站職位選擇功能的方法,涉及javascript動(dòng)態(tài)操作頁(yè)面元素結(jié)點(diǎn)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08