2014-10-19 128 views
0

完整的URL参数我有一个看起来像这样的URL:拉包含散列标签

example.com/puppy-reservation?puppy=Bitzy's Female #1 

我需要阅读整个URL参数。我试着用下面的脚本:

$.urlParam = function(name){ 
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); 
    if (results==null){ 
     return null; 
    } 
    else{ 
     return results[1] || 0; 
    } 
} 

console.log(decodeURIComponent($.urlParam('puppy'))); 

当这运行它给我Bitzy's Female

如何修改脚本以读取整个URL参数? IE:Bitzy's Female #1

进一步解释一下。我的CMS正在输出数据库条目的名称。在这种情况下,它是Bitzy's Female #1。这是它进入CMS的方式。在一个页面上,一个人可以点击您在上面看到的URL:example.com/puppy-reservation?puppy=Bitzy's Female #1

当页面加载时,我读取URL参数并将名称插入页面上的几个字段。这就是为什么我需要读取完整参数,包括散列标签,因此它在页面上正确显示。

+0

从否定的字符集删除''#? – hjpotter92 2014-10-19 23:10:45

+0

@ hjpotter92 - 可能,但我正在寻找一种方法,让它尽可能地在那里。 – L84 2014-10-19 23:12:20

+2

你能解释一下你的意思吗?如果要匹配参数直到字符串结尾,请尝试'(。+?(?:&| $))' – hjpotter92 2014-10-19 23:16:27

回答

0

此答案的荣誉属于@ hjpotter92。我把它发布在这里,因为他把它留在评论中。

在我的代码,我有以下行:

var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); 

如果我改变=([^&#]*)')=(.+?(?:&|$))')它的工作。

全码:

$.urlParam = function(name){ 
    var results = new RegExp('[\?&]' + name + '=(.+?(?:&|$))').exec(window.location.href); 
    if (results==null){ 
     return null; 
    } 
    else{ 
     return results[1] || 0; 
    } 
} 

console.log(decodeURIComponent($.urlParam('puppy'))); 
0

这是否适合您?

var url = window.location.href; 
url = encodeURIComponent(url).split(encodeURIComponent('?'))[1]; 
var obj = {}; 
if (url) { 
    url = url.split(encodeURIComponent('&')); 
    for (var i = 0; i < url.length; i++) { 
     var param = url[i].split(encodeURIComponent('=')); 
     obj[decodeURIComponent(param[0])] = decodeURIComponent(param[1]); 
    } 
} 
console.log(obj); 

小提琴http://jsfiddle.net/xvgs6r38/3/