Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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 如何在“之前”检测单词:&引用;并用“包装”;span";使用jquery?_Javascript_Jquery_Html_String - Fatal编程技术网

Javascript 如何在“之前”检测单词:&引用;并用“包装”;span";使用jquery?

Javascript 如何在“之前”检测单词:&引用;并用“包装”;span";使用jquery?,javascript,jquery,html,string,Javascript,Jquery,Html,String,我试图检测文本中的一个字符,如果发现该字符,请将其前面的单词包装到HTML元素中,并删除该字符 示例: Case: 变成 <span class="th">Case</span> 要在使用之前获取单词,请执行以下操作: var th = str.split(':')[0]; 要将单词包装到我尝试过的元素中,请执行以下操作: var th_wrap = "<span class='th'></span>"; $(th).wrap(th_wr

我试图检测文本中的一个字符,如果发现该字符,请将其前面的单词包装到HTML元素中,并删除该字符

示例:

Case:
变成

<span class="th">Case</span>
要在使用之前获取单词,请执行以下操作:

var th = str.split(':')[0];
要将单词包装到我尝试过的元素中,请执行以下操作:

var th_wrap = "<span class='th'></span>";  
$(th).wrap(th_wrap);
这也不起作用

为了让它稍微复杂一点,我想捕捉任何出现的
someword:
,而不仅仅是第一个

谢谢你的指点,干杯。(javascript或jQuery)

片段

var str=$('.target').html();
if(str.indexOf(':')>-1){
var th=str.split(“:”)[0];
替换(“:”,“);
var th_wrap=“”;
$(第次).换行(第次换行);
}
th{font-weight:bold;}

案例1:
一些文本
更多的文本
更多文本

案例2:
一些文本
更多的文本
更多文本


在您的案例中,单词案例1:案例2:是文本节点

因此,您需要获取目标下的所有节点:为此,请使用

片段:

$('.target').contents().each(函数(idx,ele){
if(ele.nodeType==Node.TEXT\u Node&&
ele.textContent.indexOf(“:”)>-1){
ele.textContent=ele.textContent.replace(':','');
$(ele).换行($(''){
班级:'th'
}));
}
});
.th{
字体大小:粗体;
}

案例1:
一些文本
更多的文本
更多文本

案例2:
一些文本
更多的文本
更多文本


您可以使用正则表达式来完成这项工作。使用jquery更改p的html。在回调函数中,用于在span中包装目标字符串

$(“p”).html(函数(i,html){
返回html.replace(/(\w+\s\d+):/g,“$1”);
});
.th{color:red}

案例1:
一些文本
更多的文本
更多文本

案例2:
一些文本
更多的文本
更多文本


th必须是DOM元素。不是一串。如果您正试图用所需的
替换第一个case,最好获取
.target
的第一个子项并替换它。该代码如何知道在“:”之前包装什么?例如,“case2”-为什么它不在“Case”之前包装单词?因为在“case2”之前有一个标记(br)。如果格式发生变化,您可以始终使用正则表达式。在任何情况下,这种方法都可以只对textNode执行操作。@ovokuro是的,请参阅。如果p中存在或不存在br或任何其他元素,则该方法有效。谢谢。如果在“case”之前存在另一个单词,那么它就不起作用了如果没有br,你的解决方案对我很好,但是如果有额外的单词,另一个解决方案更好!我必须找到一个折衷办法。谢谢你的帮助
var th_wrap = "<span class='th'></span>";  
$(th).wrap(th_wrap);
th.replace(':', '');