我有一个生产商列表:
<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>
如何消除此错误?
答案 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);
});
});