在HTML中,常見(jiàn)的URL有多種表示方式:
相對(duì)URL:
example.php demo/example.php ./example.php ../../example.php /example.php
絕對(duì)URL:
http://dancewithnet.com/example.php http://dancewithnet.com:80/example.php https://dancewithnet.com/example.php
同時(shí)HTML中有大量的元素屬性值為URL,一般利用JavaScript獲取這些URL屬性值有兩種方法:
<a href="example.php" id="example-a">此時(shí)頁(yè)面絕對(duì)URL是http://dancewithnet.com/</a> <script> var oA = document.getElementById('example-a'); oA.href == 'http://dancewithnet.com/example.php'; oA.getAttribute('href') == 'example.php'; </script>
我們希望通過(guò)直接訪問(wèn)屬性的方式得到完整絕對(duì)URL,通過(guò)getAttribute方法得到其原始的屬性值,實(shí)際上這是一個(gè)比較理想的結(jié)果,在所有的A級(jí)瀏覽器中,能順利得到這個(gè)結(jié)果的只有Firefox和IE8,其他瀏覽器都或多或少特殊情況,具體哪些元素的屬性存在什么樣的情況請(qǐng)看 演示實(shí)例 。
在大部分瀏覽器中存在的問(wèn)題是,兩種方式都返回的是原始屬性值,而實(shí)際應(yīng)用中往往需要的是其絕對(duì)的URL,《Dealing with unqualified HREF values》中的解決方案太過(guò)于復(fù)雜,這里提供一種相對(duì)簡(jiǎn)單的解決方案,如果不考慮區(qū)別瀏覽器代碼會(huì)非常簡(jiǎn)單:
<form action="example.php" id="example-form"> 此時(shí)頁(yè)面絕對(duì)URL是http://dancewithnet.com/</form> <script> var oForm = document.getElementById('example-form');
//IE6、IE7、Safari、Chrome、Opera oForm.action == 'example.php'; oA.getAttribute('action') == 'example.php';
//獲取絕對(duì)URL的通用解決方案 getQualifyURL(oForm,'action') == 'http://dancewithnet.com/example.php';
getQualifyURL = function(oEl,sAttr){ var sUrl = oEl[sAttr], oD, bDo = false; //是否是IE8之前版本 //http://www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/ //http://msdn.microsoft.com/en-us/library/7kx09ct1%28VS.80%29.aspx /*@cc_on try{ bDo = @_jscript_version < 5.8 ?true : @false; }catch(e){ bDo = false; } @*/ //如果是Safari、Chrome和Opera if(/a/.__proto__=='//' || /source/.test((/a/.toString+'')) || /^function \(/.test([].sort)){ bDo = true; } if(bDo){ oD = document.createElement('div'); /* //DOM 操作得到的結(jié)果不會(huì)改變 var oA = document.createElement('a'); oA.href = oEl[sAttr]; oD.appendChild(oA); */ oD.innerHTML = ['<a href="',sUrl,'"></a>'].join(''); sUrl = oD.firstChild.href; } return sUrl; } </script>
在IE6和IE7這兩個(gè)史前的瀏覽器身上還有一些更有意思的事情,兩種方法在HTML元素A、AREA和IMG獲取的屬性值都是絕對(duì)URL,幸好 微軟為getAttribute提供了第二個(gè)參數(shù) 可以解決這個(gè)問(wèn)題,同時(shí)還可以對(duì)IFEAM和LINK元素解決前面提到的兩種方法都返回原始屬性的問(wèn)題:
<link href="../../example.css" id="example-link"> <a href="example.php" id="example-a">此時(shí)頁(yè)面絕對(duì)URL是http://dancewithnet.com/</a>
<script> var oA = document.getElementById('example-a'), oLink = document.getElementById('example-a');
oA.href == 'http://dancewithnet.com/example.php'; oA.getAttribute('href') == 'http://dancewithnet.com/example.php'; oA.getAttribute('href',2) == 'example.php';
oLink.href == 'example.php'; oLink.getAttribute('href') == 'example.php'; oLink.getAttribute('href',4) == 'http://dancewithnet.com/example.php'; </script>
原文:http://dancewithnet.com/2009/07/27/get-right-url-from-html/
本文鏈接:http://www.95time.cn/tech/web/2009/6914.asp
出處:隨網(wǎng)之舞
責(zé)任編輯:bluehearts
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|