在我的网站上,我有一些看起来像这样的字符串(可能是任何数字)
29-30-404-59556348
使用jQuery我想将其解析为
<a href="http://www.mysite.com/page.php?=29,30,404,59556348">Page</a>
我该怎么做?
答案 0 :(得分:3)
这将搜索整个页面并替换所有数字。您可能希望指定比整个正文更紧密的搜索上下文,并且您可能希望调整正则表达式以使其匹配特定的数字模式。现在它匹配页面中的任何数字或由连字符分隔的整数序列。
// This is a simple jQuery extension to find text nodes
$.fn.textNodes = function() {
var ret = [];
$.each(this.contents(), function() {
try {
if(this.nodeType == 3)
ret.push(this);
else
$(this).contents().each(arguments.callee);
} catch(e) {}
});
return $(ret);
}
// Get all the text nodes from the body
$(document.body).textNodes().each(function() {
// Test each text node to see if it has any numbers in it
if(/\d/.test(this.nodeValue))
// Remove numbers or sequences of numbers and replace with links
$(this).replaceWith(
this.nodeValue.replace(/\d+(?:-\d+)*/g, function(nums) {
return '<a href="http://www.mysite.com/page.php?ids=' + nums.split('-').join(',') + '">Path</a>'; // str.split(a).join(b) is faster than str.replace(a,b)
})
);
});
更新:这是一个与此模式中的数字匹配的版本xx-xx-xxx-xxxxxxxx
// Get all the text nodes from the body
$(document.body).textNodes().each(function() {
// Test each text node to see if it has our pattern of numbers in it
if(/\d{2}-\d{2}-\d{3}-\d{8}/.test(this.nodeValue))
// Remove sequences of numbers and replace with links
$(this).replaceWith(
this.nodeValue.replace(/\d{2}-\d{2}-\d{3}-\d{8}/g, function(nums) {
return '<a href="http://www.mysite.com/page.php?ids=' + nums.split('-').join(',') + '">Path</a>'; // str.split(a).join(b) is faster than str.replace(a,b)
})
);
});
答案 1 :(得分:1)
如果我理解正确,你可以这样做:
function getAnchor (name, code) {
var anchor = '<a href="http://www.mysite.com/page.php?={CODE}">'+name+'</a>';
return $(anchor.replace('{CODE}', code.replace('-',',')));
}
用法example:
$('body').append(getAnchor('Page', '29,30,404,59556348'));
答案 2 :(得分:0)
var url = "http://www.mysite.com/page.php?ids=" + string.replace("-", ",");
请注意,我已将查询字符串名称设置为ids。您可能希望这样做,以便能够在服务器端代码中更轻松地读取查询字符串值。