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