我有这部分代码
<a href='project.php?id=5'>test</a>
id
号码可以有不同的长度,我只需要提取这个号码。
是通过正则表达还是更好的方式?
修改
我有解决方案,适合我的问题,你的想法:
string.split('=')[2].split('\'')[0]
当字符串包含文本时。我敢肯定,该文本将始终具有相同的模式
答案 0 :(得分:3)
假设您有字符串"<a href='project.php?id=5'>test</a>"
使用正则表达式来解析HTML可以快速实现真正的丑陋(如果a
有更多属性会怎么样?如果有多个标签怎么办?)
最干净的方法是将其转储到新的HTML元素中,并使用强大的本机内置DOM API而不是字符串将其作为HTML进行处理。
var temp = document.createElement("div");
temp.innerHTML = "<a href='project.php?id=5'>test</a>";
var url = temp.firstChild.href; // now contains project.php?id=5
现在我们可以使用更传统的工具来提取id
var id = url.split("=")[1]; // the first thing after =.
更一般地说,策略是:
.firstChild
已足够,但getElementsByTagName
甚至querySelector
可能有用。如果您不熟悉DOM API,this tutorial是一个很好的起点。这就是我们使用JavaScript处理文档的方式,并且知道它对您作为前端JavaScript开发人员的成功非常重要。
答案 1 :(得分:0)
function parse(url){
var result = { pathname: null, search: {} };
var parts = url.split('?');
result.pathname = parts[0];
var search = parts[1];
if(search){
var ps = search.split('&');
for(var i = 0; i < ps.length; i++){
var p = ps[i].split('=');
result.search[p[0]] = p[1];
}
}
return result;
}
parse('project.php?id=5');
编辑:获取锚元素:
var anchors = document.getElementsByTagName('a');
for(var i = 0; i < anchors.length; i++){
var a = anchors[i];
if(a.innerHTML === 'test')
console.log(parse(a.href));
}