location
對象已經具有完美的性能,如pathname
,hostname
等,它可以爲您提供URL的單獨部分。使用.search
屬性,而不是試圖將URL作爲字符串破解(?
不僅可能出現在該位置)。
然後是&
字符分裂的情況(如果您想變得更好,也可能是;
),然後根據HTML4 B2.2檢查每個參數。對於一般情況,這需要正確的URL解碼,因爲g%62n_keywords=...
是拼寫相同參數的有效方式。在出路時,你將需要再次編碼,以停止&
繼續下一個參數(以及包含其他無效字符)。
這裏有幾個實用函數可以用來更容易地處理查詢字符串操作。它們在location.search
或link.search
中查看的?...
字符串和查詢Object
將參數名稱映射到值數組(因爲form-url編碼的查詢可以具有相同參數的多個實例)之間進行轉換。
function queryToLookup(query) {
var lookup= {};
var params= query.slice(1).split(/[&;]/);
for (var i= 0; i<params.length; i++) {
var ix= params[i].indexOf('=');
if (ix!==-1) {
var name= decodeURIComponent(params[i].slice(0, ix));
var value= decodeURIComponent(params[i].slice(ix+1));
if (!(name in lookup))
lookup[name]= [];
lookup[name].push(value);
}
}
return lookup;
}
function lookupToQuery(lookup) {
var params= [];
for (var name in lookup)
for (var i= 0; i<lookup[name].length; i++)
params.push(encodeURIComponent(name)+'='+encodeURIComponent(lookup[name][i]));
return params.length===0? '' : '?'+params.join('&');
}
這使得簡單的用法:
var lookup= queryToLookup(location.search);
lookup['gbn_keywords']= ['coffee & tea'];
var query= lookupToQuery(lookup);
你可以通過'document.location.search'獲得 「查詢字符串」 了。你可能想使用'escape(term)'。 – 2010-09-04 21:36:27