使用Javascript/Jquery将数字包装在带有span标记的文本中
我试图扭转这种局面:使用Javascript/Jquery将数字包装在带有span标记的文本中,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我试图扭转这种局面: <p>this is sample 52 for demonstration</p> 这是示例52,用于演示 到 这是示例52,用于演示 通过JS/Jquery 52只是一个例子,有一个不同数字的长字符串,我想检测它们 我认为这是关于使用正则表达式的 抱歉,我在手机上问你,在不知道真实用例的情况下,不要使用编辑器,这里有一个简单的字符串替换,可以完成你的要求 document.querySelector('p').innerHTML=docu
<p>this is sample 52 for demonstration</p>
这是示例52,用于演示
到
这是示例52,用于演示
通过JS/Jquery
52只是一个例子,有一个不同数字的长字符串,我想检测它们
我认为这是关于使用正则表达式的
抱歉,我在手机上问你,在不知道真实用例的情况下,不要使用编辑器,这里有一个简单的字符串替换,可以完成你的要求
document.querySelector('p').innerHTML=document.querySelector('p').innerHTML.replace('52','52')代码>
span{
背景颜色:黄色;
}
这是示例52,用于演示
更新2:
正如@Kamal在评论中提到的,检查一个数字是否已经包装好会很好。以下是更安全的实现,但不是必需的:
var wrapper = ['<span class="foo" >', '</span>']
var re = new RegExp('(' + wrapper[0] + ')?(\\d+)(' + wrapper[1] + ')?', 'g');
var $element = jQuery('p');
$element.text().replace(re, function(match, p1, p2, p3) {
if (typeof p1 === 'undefined') {
p1 = '';
}
if (typeof p3 === 'undefined') {
p3 = '';
}
if (p1 != wrapper[0] && p3 != wrapper[1]) {
return p1 + wrapper[0] + p2 + wrapper[1] + p3;
} else {
return match;
}
});
var包装器=['',]
var re=new RegExp('('+wrapper[0]+')?(\\d+)('+wrapper[1]+')?','g');
var$element=jQuery('p');
$element.text().replace(re,函数(匹配,p1,p2,p3){
如果(p1的类型==‘未定义’){
p1='';
}
如果(p3的类型===‘未定义’){
p3='';
}
if(p1!=包装器[0]&p3!=包装器[1]){
返回p1+包装器[0]+p2+包装器[1]+p3;
}否则{
复赛;
}
});
如果这个脚本看起来像这样,那么它不会包装一个数字。你尝试了什么?你在哪里卡住了?我不知道如何检测字符串上的数字。我想首先我应该检测数字,然后找到数字开始的位置,然后用string+span.foo+string创建一个innerHTML,但我确信一定有更简单的方法或更好的功能我不需要替换52,有一个长字符串,它有不同的数字,我想检测数字并用span包装它们您还可以添加regex来查找数字,而不是硬编码52..应该类似于:var modifiedText=$element.html().replace($element.html().match(/\d+/),“$element.html().match(/\d+/)”@CameronA添加正则表达式,如我的评论所示,将为您添加魔力!您也可能会迭代所有的p标记并添加这个逻辑。@CameronA我调整了我的答案。我建议将此要求添加到问题中。您也可以添加正则表达式来查找数字,而不是硬编码52..应该类似于:var modifiedText=$element.text().replace($element.html().match(/\d+/),'52');你的逻辑只会寻找52。。而他的问题是要求所有标签都有数字将其转换为
var $element = jQuery('p');
var modifiedText = $element.text().replace('52', '<span class="foo" >52</span>');
$element.text(modifiedText);
var $element = jQuery('p');
var modifiedText = $element.text().replace(/\d+/g, '<span class="foo">$&</span>');
$element.text(modifiedText);
var wrapper = ['<span class="foo" >', '</span>']
var re = new RegExp('(' + wrapper[0] + ')?(\\d+)(' + wrapper[1] + ')?', 'g');
var $element = jQuery('p');
$element.text().replace(re, function(match, p1, p2, p3) {
if (typeof p1 === 'undefined') {
p1 = '';
}
if (typeof p3 === 'undefined') {
p3 = '';
}
if (p1 != wrapper[0] && p3 != wrapper[1]) {
return p1 + wrapper[0] + p2 + wrapper[1] + p3;
} else {
return match;
}
});