国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
JavaScript 讀 URL 參數(shù)改進(jìn)版
此前發(fā)表的那一版確實(shí)能不用循環(huán),但是總用正則表達(dá)式的替換,不一定比用循環(huán)提高性能,而且把程序搞得有些太復(fù)雜了。從《JavaScript權(quán)威指南》上學(xué)到的范例如下,
/* 《JavaScript權(quán)威指南》介紹的更簡(jiǎn)潔的取 URL 參數(shù)的方法,不用正則表達(dá)式,用一次循環(huán)。一次性返回一個(gè)對(duì)象的好處是只需要調(diào)用一次此函數(shù),參數(shù)和值對(duì)可以存在一個(gè)對(duì)象里,以后再取其它參數(shù)的值就不用再調(diào)用此函數(shù)了,只要取對(duì)象的屬性就行了。
 * 用法:
 * var args = getArgs( );  // 從 URL 解析出參數(shù)
 * var q = args.q || "";  // 如果定義了某參數(shù),則使用其值,否則給它一個(gè)默認(rèn)值
 * var n = args.n ? parseInt(args.n) : 10;
 */
var getArgs = function ()
{
    var args = new Object( );  //聲明一個(gè)空對(duì)象
    var query = window.location.search.substring(1);     // 取查詢字符串,如從 http://www.snowpeak.org/testjs.htm?a1=v1&a2=&a3=v3#anchor 中截出 a1=v1&a2=&a3=v3。
    var pairs = query.split("&");                 // 以 & 符分開(kāi)成數(shù)組
    for(var i = 0; i < pairs.length; i++) {
        var pos = pairs[i].indexOf('=');          // 查找 "name=value" 對(duì)
        if (pos == -1) continue;                  // 若不成對(duì),則跳出循環(huán)繼續(xù)下一對(duì)
        var argname = pairs[i].substring(0,pos);  // 取參數(shù)名
        var value = pairs[i].substring(pos+1);    // 取參數(shù)值
        value = decodeURIComponent(value);        // 若需要,則解碼
        args[argname] = value;                    // 存成對(duì)象的一個(gè)屬性
    }
    return args;                                  // 返回此對(duì)象
}
它的突出優(yōu)點(diǎn)就是程序只用執(zhí)行一次提取操作,以后再重復(fù)取參數(shù)值,都不用再執(zhí)行程序了。取 URL 參數(shù)還是這樣比較簡(jiǎn)便易行,又好理解。
下面是我此前發(fā)表的“不用循環(huán)”但“有些太復(fù)雜”的版本:
//不用循環(huán)純用正則實(shí)現(xiàn)從 URL 中取參數(shù)的值。取代循環(huán)的核心技術(shù)是字符串的 replace() 方法可以用函數(shù)作第二參數(shù),按用戶定義的方式去替換。
//若有此參數(shù)名但無(wú)值,則返回空字符串;若無(wú)此參數(shù)名,返回 undefined。
var getArg = function(argname)
{
 var str = location.href;
 var submatch;
 //先從 URL 中取出問(wèn)號(hào)和井口與之間的查詢字符串,如從 http://www.snowpeak.org/testjs.htm?a1=v1&a2=&a3=v3#anchor 中截出 a1=v1&a2=&a3=v3。
 //問(wèn)號(hào)是模式的特殊字符,所以要寫(xiě)成 \?;井號(hào)可有可無(wú),所以模式結(jié)尾是 #?
 if (submatch = str.match(/\?([^#]*)#?/))
 {
  //取到捕捉的子匹配形如 a1=v1&a2=&a3=v3,在前面加個(gè) & 做成規(guī)則的 &a1=v1&a2=&a3=v3 便于下一步替換
  var argstr = '&'+submatch[1];
  //做個(gè)替換用的函數(shù),把找到的每組形如 &a1=v1 替換成 a1:"v1", 這樣的對(duì)象定義用的屬性聲明
  var returnPattern = function(str)
  {
   //$1 和 $2 代表捕捉到的第1個(gè)和第2個(gè)子匹配,必須用在字符串里
   return str.replace(/&([^=]+)=([^&]*)/, '$1:"$2",');
  }
  //執(zhí)行一個(gè)全局的正則替換,第二參數(shù)就是剛才定義的替換函數(shù),把 a1=v1&a2=&a3=v3 替換成 a1:"v1",a2:"",a3:"v3",
  argstr = argstr.replace(/&([^=]+)=([^&]*)/g, returnPattern);
  //最后再執(zhí)行一個(gè)對(duì)象的聲明,需要形如 var retvalue = {a1:"v1",a2:"",a3:"v3"}; 的對(duì)象聲明,而剛才替換完的字符串結(jié)尾還有個(gè)逗號(hào),把結(jié)尾的逗號(hào)用 substr 截掉即可
  eval('var retvalue = {'+argstr.substr(0, argstr.length-1)+'};');
  //現(xiàn)在就得到了一個(gè)對(duì)象,URL 中每個(gè)參數(shù)名是其屬性名,參數(shù)值是對(duì)應(yīng)的屬性值
  return retvalue[argname];
 }
}
//測(cè)試
document.write('a1='+getArg('a1')+', a2='+getArg('a2')+', a3='+getArg('a3'));
 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JS獲取當(dāng)前完整的url地址以及參數(shù)的方法
JS獲取GET參數(shù)
《JavaScript 闖關(guān)記》之 BOM
JS 逐個(gè)訪問(wèn)URL的每個(gè)查詢字符串參數(shù)
JS中BOM相關(guān)知識(shí)點(diǎn)總結(jié)
JavaScript筆記:錯(cuò)誤處理與調(diào)試
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服