Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript/Jquery将数字包装在带有span标记的文本中_Javascript_Jquery_Html_Css - Fatal编程技术网

使用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;
    }
});