我的链接可能如下:
<a href="/some/where?id=123">click</a>
点击链接后,我的处理程序被触发:
$(document).on("click", "a", function (e) {
e.preventDefault();
var hrefAttribute = $(this).attr("href"); // "/some/where?id=123"
console.log(hrefAttribute);
});
hrefAttribute包含“/ some / where?id = 123”。
我想要的是提取名为id的参数的值。因此值“123”
随着时间的推移,可能会向url添加更多属性,我宁愿不通过字符串操作提取参数值。如果可能的话,参数名称的JQuery选择值会更好。
答案 0 :(得分:1)
如果没有123
属性的字符串操作,则无法获取href
。但是,您可以设计该字符串操作,以便即使将其他查询参数添加到href
,它仍然可以工作。
例如,您可以使用通用函数从URL中提取查询参数,如下所示:
// returns the query argument for the given key or undefined if the key is not found
function getParam(url, key) {
var regex = new RegExp("\\?.*?" + key + "=" + "(.*?)(&|$)");
var matches = url.match(regex);
if (matches) {
return matches[1];
}
}
var id = getParam(this.href, "id");
答案 1 :(得分:1)
您可以使用正则表达式提取id
,如下所示:
var hrefAttribute = $(this).attr("href"),
id = hrefAttribute.replace(/^*id=(\d+)\b.*$/g,'$1');
console.log( id );
$(document).on("click", "a", function (e) {
e.preventDefault();
var hrefAttribute = $(this).attr("href"),
id = hrefAttribute.replace(/^.*id=(\d+)\b.*$/g,'$1');
console.log(id);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a href="/some/where?jsd=5567&id=123">click</a>
When the link is clicked, my handler is triggered:
另一种方法是使用.forEach()
数组方法:
function getQParam(url, param) {
var oParam = {};
url.indexOf('?') === 0 || url.split('?')[1].split('&').forEach(function(v) {
oParam[ v.split('=')[0] ] = v.split('=')[1];
});
return oParam[ param ];
}
var id = getQParam( this.href, 'id' );
function getQParam(url, param) {
var oParam = {};
url.indexOf('?') === 0 || url.split('?')[1].split('&').forEach(function(v) {
oParam[ v.split('=')[0] ] = v.split('=')[1];
});
return oParam[ param ];
}
$(document).on("click", "a", function (e) {
e.preventDefault();
var id = getQParam( this.href, 'id' );
console.log( id );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a href="/some/where?id=123">click</a>
When the link is clicked, my handler is triggered:
答案 2 :(得分:0)