如何使用jQuery使用列表中的元素包装字符串

时间:2018-07-13 12:02:34

标签: jquery

我有一个生产商列表:

<ul>
    <li>Name 1</li>
    <li>Other name</li>
    <li>Next producer</li>
    <li>Something</li>
    <li>Somethingelse</li>
</ul>

在另一个地方,我想用<span> </span>包裹上面的名字。该脚本应具有以下作用:

替换:

<p>Name 1 details of the name</p>

上:

<p><span>Name 1</span> details of the name</p>

我正在使用的代码如下:

var prodName = [];
$("ul li").each(function() { prodName.push($(this).text()); });     

$( "p" ).each(function () {
    $(this).html(function(_,html) {
        var reg = new RegExp('('+prodName.join('|')+')','gi');
        return html.replace(reg, '<span>$1</span>', html);
        return false;
    });
});

一切正常,直到列表中的元素完全以相同的字符开头: Something Something else 会产生效果:

轮到:

<p>Somethingelse details of the name</p>

<p><span>Something</span>else details of the name</p>

代替

<p><span>Somethingelse</span> details of the name</p>

如何消除此错误?

1 个答案:

答案 0 :(得分:0)

尝试

$( "p" ).each(function () {
    $(this).html(function(_,html) {
        var reg = new RegExp('('+prodName.join('|')+')\\s','gi'); // \\s at the end of your regex
        return html.replace(reg, '<span>$1</span> ', html);
    });
});