函数使用javascript和Jquery检索url变量?

在我的脚本中有一个简单的列表显示了要编辑的链接

 

我需要的是读取变量id所以我可以通过.ajax调用发送它,我尝试了这个function

 $(document).ready(function(){ function getUrlVars() { var vars = [], hash; var hashes = window.location.href.slice(window.location.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; } $('.edit').click(function(){ var test = getUrlVars()["id"]; alert(test); }); }); 

当我点击链接时,警报消息显示undefined

我尝试了另一个function:

 $(document).ready(function(){ var urlParams = {}; (function () { var match, pl = /\+/g, // Regex for replacing addition symbol with a space search = /([^&=]+)=?([^&]*)/g, decode = function(s) { return decodeURIComponent(s.replace(pl, " ")); }, query = window.location.search.substring(1); while (match = search.exec(query)) urlParams[decode(match[1])] = decode(match[2]); })(); $('.edit').click(function(){ var test = urlParams["id"]; alert(test); }); }); 

…但即便如此,也会显示undefined的警报消息。

您尝试过的方法不会将URL作为参数,而是解析当前的URL参数 (即兄弟中的URL)。 只需修改这样的第一个方法就可以了:

 $(function() { function getUrlVars(url) { var vars = [], hash; var hashes = url.slice(url.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; } $('.edit').click(function() { var href = $(this).attr("href"); var test = getUrlVars(href)["id"]; alert(test); }); }); 

旁注:你也可以修改第二个,它们都做同样的工作。

作为您的问题的替代方案,为什么不将hrefid部分放入data参数并读取? 这将节省您必须剖析URL。 试试这个:

  
 $('.edit').click(function(){ var id = $(this).data("id"); alert(id); }); 

试试这个:

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

你几乎第一次就做对了,你只需要将vars声明为对象并摆脱vars.push(...)

这是一个有效的例子 – http://jsfiddle.net/KN9aK/1/show/?id=yoursuperduperid

来源http://jsfiddle.net/KN9aK/1/

将其更改为使用对象,而不是数组。

 function getUrlVars() { var vars = {}, //<--object hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1) .split('&'); for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars[hash[0]] = hash[1]; //<--add to the object } return vars; //<--return the object } 

您也可以使用window.location.search这样您就不必执行该初始切片。