Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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忽略子元素_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何替换父元素的内容,使用jQuery忽略子元素

Javascript 如何替换父元素的内容,使用jQuery忽略子元素,javascript,jquery,html,Javascript,Jquery,Html,我有一些类似这样的HTML: <div id="demo"> <p> <span class="myClass">Word test should not be marked</span> Word test should be marked<br /> </p> </div> 使用获取所有子节点,然后迭代并更新文本节点 $('demo p') .content

我有一些类似这样的HTML:

<div id="demo">
    <p>
        <span class="myClass">Word test should not be marked</span>
        Word test should be marked<br />
    </p>
</div>

使用获取所有子节点,然后迭代并更新文本节点

$('demo p')
.contents()//获取所有子节点,包括文本和注释节点
.each(函数(){//在节点上迭代
if(this.nodeType==3)//检查节点是否为文本节点
$(this.replaceWith(this.textContent.replace(/test/g,'$&'))//更新内容并用html内容替换节点
});
.test{
颜色:红色;
}


单词测试不应该被标记
应标记单词测试


这里有一个精巧的正则表达式解决方案:

    var html=$("#demo").html();
    var elements=html.split(/(<[^>]+>)/); // split into tags and text
    $.each(elements,function(i,e){
    if(!e.match(/<[^>]+>/)){
        if(elements[i-1]!==undefined){
        if(!$(elements[i-1]).hasClass('myClass')){
            elements[i]=elements[i].replace(/test/g,"<span class='highlight'>test</span>");
        }
      }
    }
  });
  $("#demo").html(elements.join(''));
var html=$(“#demo”).html();
var elements=html.split(/(]+>)/);//分为标记和文本
$。每个(元素、功能(即){
如果(!e.match(/]+>/)){
if(元素[i-1]!==未定义){
if(!$(元素[i-1]).hasClass('myClass')){
元素[i]=元素[i]。替换(/test/g,“test”);
}
}
}
});
$(“#demo”).html(elements.join(“”));
不过,如果要用类来标记确实要替换的文本,那么就可以执行以下操作:

$("#demo").find("span[class='myClass']").each(function(){
    $(this).html($(this).text().replace(/test/g,"<span class='highlight'>test</span>"));
});
$(“#demo”).find(“span[class='myClass']”)。每个(函数(){
$(this.html($(this.text().replace(/test/g,“test”));
});

为这两种解决方案工作。

我不确定是否理解您的意思。你想通过在
.myClass
span中用
span
包装来突出显示单词
test
吗?请检查我刚才添加到你的代码中的修复程序是否符合你的预期,我想是这样的,否则它将无法工作<代码>单词测试应该被标记
仍然在
p
的根中。
$("#demo").find("span[class='myClass']").each(function(){
    $(this).html($(this).text().replace(/test/g,"<span class='highlight'>test</span>"));
});