jQuery:如何获取URL的参数?

19

我刚接触jQuery,现在要获取由我的服务器生成的URL的参数,但是遇到了困难。我有这样一个URL:

<span class="popuptest"><a href="www.example.com/test?param1=1&param2=2">find param</a></span>

我的jQuery函数如下:

$(function() {
  $('.popuptest a').live('click', function(event) {
  $.extend({
    getUrlVars: function(){
      var vars = [], hash;
      var hashes = this.href.slice(this.href.indexOf('?') + 1).split('&');
      for(var i = 0; i < hashes.length; i++)
      {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
      }
      return vars;
    },
    getUrlVar: function(name){
      return $.getUrlVars()[name];
    }
  });
  var second = getUrlVars()["param2"];
  alert(second);
  return false;
  });
});
点击链接应该显示“2”,但我什么也没看到……有没有对于jQuery新手的帮助?提前致谢!
我在博客上找到了这篇文章:http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html

1
@FelixKling 确实如此,但我认为这个问题比原来的更好,因为它有示例URL和代码。它是如何获得这么多赞成票的仍然是一个谜。 - Bill the Lizard
1
@Bill:你说得对...我只是在思考,因为这里有一个答案只是引用了另一个问题,另一个答案基本上复制了被接受的答案中的代码。 - Felix Kling
9个回答

18

您不需要使用jQuery,您可以使用纯JavaScript来实现该目的:

function getParameterByName( name,href )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}

你可以这样调用该函数:getParameterByName(param1,你的链接地址)

演示


8
当然,你不需要jQuery。你认为jQuery是如何工作的?它使用JavaScript。jQuery的重点在于方便使用。 - Val Kornea

13

对URL进行小的改进,仅解析一次,返回参数数组:

function getURLParameters(url){

    var result = {};
    var hashIndex = url.indexOf("#");
    if (hashIndex > 0)
       url = url.substr(0, hashIndex);        
    var searchIndex = url.indexOf("?");
    if (searchIndex == -1 ) return result;
    var sPageURL = url.substring(searchIndex +1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++)
    {       
        var sParameterName = sURLVariables[i].split('=');      
        result[sParameterName[0]] = sParameterName[1];
    }
    return result;
}

http://jsfiddle.net/shakhal/gXM3u/


7

这很简单,你只需将想要从URL中获取的变量名放入此函数中,它就会返回URL变量的值。

function getParameterByName(name) {
 return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

3

Jquery内置了从URL获取参数的函数。

var url="http://example.com/?id=76dc915c-b1c2-47f6-ae63-a3ea6ce78f2a";

let searchParams = new URLSearchParams(window.location.search)

searchParams.has('id') // true

let paramId = searchParams.get('id');

3
function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}

1

你的 jQuery 可能是

$(function() {  
 $('.popuptest a').live('click', function(event) {
 $.extend({     getUrlVars: function(){
  var vars = [], hash;
  var hashes = $('.popuptest a').attr("href").slice($('.popuptest     a').attr("href").indexOf('?') + 1).split('&');
  for(var i = 0; i < hashes.length; i++)
  {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
  }
  return vars;
},
getUrlVar: function(name){
  return $.getUrlVars()[name];
}
  });
  var second = $.getUrlVars()["param2"];
  alert(second);
  return false;
  });
});

需要注意的事项:

  1. 第一行中的$.getUrlVars - 变量second = $.getUrlVars()["param2"];
  2. this.href被替换为$('.popuptest a').attr("href")

1

这里

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

// example.com?param1=name&param2=&id=6
$.urlParam('param1'); // name
$.urlParam('id');        // 6
$.urlParam('param2');   // null

1

如此简单,您可以使用任何url并在Javascript中获取值。这是完整的代码集

<!DOCTYPE html>
<html>
<head>
<script>
var tech = getQueryVariable('filename');
function getQueryVariable(variable)
{
       var query = window.location.search.substring(1);
       var vars = query.split("&");
       for (var i=0;i<vars.length;i++) {
               var pair = vars[i].split("=");
               if(pair[0] == variable){return pair[1];}
       }
       return(false);
}
alert(tech);
</script>
</head>
<body>
<p>Get parameters of a url</p>
</body>
</html>

0
使用以下代码已经有一段时间了,但最近发现URL中的base64_encode字符串存在问题,末尾有==,例如:/index.php?a=1&b=2&c=Mw==&d=4。
使用getUrlVar("c")会返回'Mw',但实际上应该是'Mw==',因此需要添加一行额外的代码:
 $.extend({
  getUrlVars: function(){
   var vars = [], hash;
   var hashes = $('.popuptest a').attr("href").slice($('.popuptest a').attr("href").indexOf('?') + 1).split('&');
   for(var i = 0; i < hashes.length; i++)
   {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    if (hash.length > 2) hash[1] = hash.slice(1).join('=');
    vars[hash[0]] = hash[1];
   }
   return vars;
  },
  getUrlVar: function(name){
   return $.getUrlVars()[name];
 }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接