Javascript 如何为特定字符之间的文本添加类?

Javascript 如何为特定字符之间的文本添加类?,javascript,jquery,Javascript,Jquery,我正在用Blogger写我自己的博客。我想标记一些突出的单词。例如,当我在编辑器中编写*Red*时。它应该自动添加一个键类,并用span标记将其包装起来。因此,最终结果应如下所示: <span class="key">Red</span> 红色 现在,我正在尝试编写JQuery脚本,但它仍然不能正常工作 $markText = $('span').filter(function(){ $t = $(this).text(); return $t.charAt(0) =

我正在用Blogger写我自己的博客。我想标记一些突出的单词。例如,当我在编辑器中编写
*Red*
时。它应该自动添加一个
类,并用span标记将其包装起来。因此,最终结果应如下所示:

<span class="key">Red</span>
红色
现在,我正在尝试编写JQuery脚本,但它仍然不能正常工作

$markText = $('span').filter(function(){
$t = $(this).text();
return $t.charAt(0) === "*" && $t.charAt(4) === "*"}).each(function() {
    $s1 = $t.slice(1,4);
    $s2 = $t.slice(5);
    $(this).replaceWith('<span class="key">' + $s1+ '</span>' + '<span>'+$s2+'</span>');
});
$markText=$('span').filter(函数(){
$t=$(this.text();
返回$t.charAt(0)==“*”&&&$t.charAt(4)==“*”}){
$s1=$t.slice(1,4);
$s2=$t.slice(5);
$(this).替换为(“”+$s1+“”+“”+“”+$s2+“”);
});
请参见

侧边的演示,每个函数中的$t应替换为$(this).text()

$markText=$('span').filter(函数(){
$t=$(this.text();
返回$t.charAt(0)==“*”&&&$t.charAt(4)==“*”}){
$s1=$(this.text().slice(1,4);
$s2=$(this.text().slice(5);
$(this).替换为(“”+$s1+“”+“”+“”+$s2+“”);
});

您的代码可以按照RaymondM的建议进行修复,但您也可以尝试以下方法:

$markText = $('span').each(function (i, e) {
    $e = $(e);
    while ($(e).text().indexOf('*') != -1) {
        $e.html($e.html().replace('*', '<span class="key">').replace('*', '</span>'));
    }
});
$markText=$('span')。每个(函数(即,e){
$e=$(e);
while($(e).text().indexOf('*')!=-1){
$e.html($e.html().replace('*','').replace('*','');
}
});
这利用了
replace
方法只修改第一次出现的目标字符串这一事实


您是否尝试只获取过滤器的结果,以确保它是否可以找到包含红色的量程?@MehranHatami是的,它找到了红色量程。然而,结果非常奇怪,在其他任何情况下都不起作用。所以,我想让它在所有情况下都能工作。你能解释一下为什么它能产生不同的结果吗?谢谢你的回复。它怎么可能只出现第一次?while循环是否意味着替换所有找到的星号?@LVarayut-Umm,这次让我来解释一下。
replace
方法只替换第一个匹配项,这意味着
'123123'。replace('2','5')
将给出'153123123'。因此,我在while循环的每个迭代中使用了两个
replace
调用(第一个用于打开span标记,第二个用于关闭span标记)。每次迭代都将处理一对星号,并将内部内容包装到一个新的span标记中,循环将继续这样做,直到找到所有这样的星号对为止。请参阅更新的,这也适用于多个单词。
$markText = $('span').each(function (i, e) {
    $e = $(e);
    while ($(e).text().indexOf('*') != -1) {
        $e.html($e.html().replace('*', '<span class="key">').replace('*', '</span>'));
    }
});