最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從URL中提取參數(shù)與將對象轉(zhuǎn)換為URL查詢參數(shù)的實現(xiàn)代碼

 更新時間:2012年01月12日 21:22:34   作者:  
這兩種主要是對《Prototype淺析》先前略過的Sring部分中toQueryParams和Object部分的toQueryString方法的補充
一、從URL中提取參數(shù)

有下列字符串:

var linkURL = 'http://localhost:8080/String/string_6.html?昵稱=小西山子&age=24#id1';
對于一個真實的URL地址,可以用js來讀取location中的相關信息來獲得某些信息,下面列舉一些:
復制代碼 代碼如下:

location.origin : http://localhost【域】
location.pathname : /project_js/Javascript/js_basic/demo/String/string_6.html【URL路徑】
location.host : localhost【主機+端口】
location.hostname : localhost【主機名】
location.port :【端口】
location.search : ?name=xesam【查詢字符串】
location.hash : #age【錨點】
location.href : http://localhost/project_js/Javascript/js_basic/demo/String/string_6.html?name=xesam#age【完整形式】
location.protocol : http【協(xié)議】

其中,與從URL中提取參數(shù)主要是用到location.search。不過為了通用,我們不去讀取location.search,直接處理字符串。

提取字符串查詢字符串之后,轉(zhuǎn)化為對象的形式。

先討論幾種查詢字符串的情況:

(1)?昵稱=小西山子&age=24#id1 -->{昵稱:'小西山子',age:'24'}

(2)?昵稱&age=24#id1'; -->{昵稱:undefined,age:'24'}

(3)?=小西山子&age=24#id1 -->{age:'24'}

(4)?昵稱=小西山子=又一個&age=24&age=24#id1 -->{昵稱:'小西山子=又一個',age:['24','24']}
復制代碼 代碼如下:

function toQueryParams(){
var search = this.replace(/^\s+/,'').replace(/\s+$/,'').match(/([^?#]*)(#.*)?$/);//提取location.search中'?'后面的部分
if(!search){
return {};
}
var searchStr = search[1];
var searchHash = searchStr.split('&');

var ret = {};
for(var i = 0, len = searchHash.length; i < len; i++){ //這里可以調(diào)用each方法
var pair = searchHash[i];
if((pair = pair.split('='))[0]){
var key = decodeURIComponent(pair.shift());
var value = pair.length > 1 ? pair.join('=') : pair[0];
console.log()
if(value != undefined){
value = decodeURIComponent(value);
}
if(key in ret){
if(ret[key].constructor != Array){
ret[key] = [ret[key]];
}
ret[key].push(value);
}else{
ret[key] = value;
}
}
}
return ret;
}
console.dir(toQueryParams.call(linkURL));

上面基本就是Prototype中toQueryParams的實現(xiàn),上面又一個步驟是用'='分割參數(shù),然后在value中再拼接。另外可以用substring來實現(xiàn):
復制代碼 代碼如下:

function toQueryParams(){
var search = this.replace(/^\s+/,'').replace(/\s+$/,'').match(/([^?#]*)(#.*)?$/);
if(!search){
return {};
}
var searchStr = search[1];
var searchHash = searchStr.split('&');

var ret = {};
searchHash.forEach(function(pair){
var temp = '';
if(temp = (pair.split('=',1))[0]){
var key = decodeURIComponent(temp);
var value = pair.substring(key.length + 1);
if(value != undefined){
value = decodeURIComponent(value);
}
if(key in ret){
if(ret[key].constructor != Array){
ret[key] = [ret[key]];
}
ret[key].push(value);
}else{
ret[key] = value;
}
}
});
return ret;
}
console.dir(toQueryParams.call(linkURL));


一、對象轉(zhuǎn)換為URL查詢參數(shù)

對象轉(zhuǎn)換為URL查詢參數(shù)就麻煩一點。不過由于是轉(zhuǎn)換成查詢參數(shù)形式,因此只能處理單層嵌套的對象,子對象就不能處理了。其原理就是toQueryParams的反向操作。
復制代碼 代碼如下:

function toQueryPair(key, value) {
if (typeof value == 'undefined'){
return key;
}
return key + '=' + encodeURIComponent(value === null ? '' : String(value));
}
function toQueryString(obj) {
var ret = [];
for(var key in obj){
key = encodeURIComponent(key);
var values = obj[key];
if(values && values.constructor == Array){//數(shù)組
var queryValues = [];
for (var i = 0, len = values.length, value; i < len; i++) {
value = values[i];
queryValues.push(toQueryPair(key, value));
}
ret = ret.concat(queryValues);
}else{ //字符串
ret.push(toQueryPair(key, values));
}
}
return ret.join('&');
}
console.log(toQueryString({
name : 'xesam',
age : 24
})); //name=xesam&age=24
console.log(toQueryString({
name : 'xesam',
age : [24,25,26]
})); //name=xesam&age=24&age=25&age=26

真實源碼中用的是inject方法,不過在Enumerable部分,因此上面作了替換。

相關文章

  • js window.event對象詳盡解析

    js window.event對象詳盡解析

    最近因為工作需要,弄了好多天的js了,老婆一問我在弄 ajax, 一問我在弄js,她都聽得沒有一點興趣了,我自己感覺還好,畢竟做出來了東西就有成就感吧,這里把幾個有用但是不常見的東西貼出來供大家參考參考
    2009-02-02
  • 小程序?qū)崿F(xiàn)簡單的計算器

    小程序?qū)崿F(xiàn)簡單的計算器

    這篇文章主要為大家詳細介紹了小程序?qū)崿F(xiàn)簡單的計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • JS動態(tài)日期時間的獲取方法

    JS動態(tài)日期時間的獲取方法

    這篇文章主要介紹了js獲得當前系統(tǒng)日期時間的方法,涉及javascript操作日期時間的相關技巧,非常簡單實用,需要的朋友可以參考下
    2015-09-09
  • electron中獲取mac地址的實現(xiàn)示例

    electron中獲取mac地址的實現(xiàn)示例

    在基于Electron的應用中,有一個業(yè)務需求是獲取物理網(wǎng)卡的Mac地址以用于客戶機唯一性識別,本文主要介紹了electron中獲取mac地址的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 小程序?qū)崿F(xiàn)計算器功能

    小程序?qū)崿F(xiàn)計算器功能

    這篇文章主要為大家詳細介紹了小程序?qū)崿F(xiàn)計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • js無后端實現(xiàn)點擊加載查看更多(提示SEO友好度)

    js無后端實現(xiàn)點擊加載查看更多(提示SEO友好度)

    為了提示SEO友好度,并且避免調(diào)用后端接口給服務器造成負擔,可以使用js無后端實現(xiàn)點擊加載查看更多,比如HTML中源碼存在60條記錄,預先顯示20條記錄,點擊“查看更多”一次追加10條,最后一次后按鈕文本改為“已查看全部”,在JavaScript中,你可以使用以下步驟來實現(xiàn)
    2024-10-10
  • angular bootstrap timepicker TypeError提示怎么辦

    angular bootstrap timepicker TypeError提示怎么辦

    這篇文章主要介紹了angular bootstrap timepicker TypeError提示的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • uni-app禁用返回按鈕/返回鍵的具體實現(xiàn)

    uni-app禁用返回按鈕/返回鍵的具體實現(xiàn)

    今天在使用uni-app開發(fā)登錄頁面時遇到一個需求,需要禁用返回按鈕,下面這篇文章主要給大家介紹了關于uni-app禁用返回按鈕/返回鍵的具體實現(xiàn),需要的朋友可以參考下
    2022-11-11
  • JavaScript?Map?和?Object?的區(qū)別解析

    JavaScript?Map?和?Object?的區(qū)別解析

    在JavaScript中,Map 和 Object 看起來都是用鍵值對來存儲數(shù)據(jù),那么他們有什么不同呢,這篇文章主要介紹了JavaScript?Map?和?Object?的區(qū)別,需要的朋友可以參考下
    2022-08-08
  • JS實現(xiàn)側(cè)懸浮浮動實例代碼

    JS實現(xiàn)側(cè)懸浮浮動實例代碼

    這篇文章主要介紹了JS實現(xiàn)側(cè)懸浮浮動實例代碼,有需要的朋友可以參考一下
    2013-11-11

最新評論

乐清市| 万源市| 唐山市| 永平县| 皮山县| 临江市| 南充市| 碌曲县| 温州市| 会昌县| 葫芦岛市| 从化市| 大悟县| 玉环县| 庆云县| 湘阴县| 睢宁县| 温泉县| 攀枝花市| 盐边县| 洪泽县| 伊宁市| 亳州市| 微博| 焦作市| 铁岭市| 万山特区| 溧阳市| 于都县| 保康县| 卓资县| 霍林郭勒市| 都安| 四子王旗| 德钦县| 那坡县| 赤峰市| 乐清市| 红桥区| 天水市| 嫩江县|