Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 替换元素内的文本_Javascript_Jquery - Fatal编程技术网

Javascript 替换元素内的文本

Javascript 替换元素内的文本,javascript,jquery,Javascript,Jquery,我需要替换任意元素中的一部分文本。我不知道元素的任何结构,包括它可能具有的任何子元素,但我必须假设可能存在带有附加绑定的子元素。例如: <div id="checkit"> Lorem ipsum textum checkum. <input type="button" id="clickit" value="Click Me" /> </div> 益智草。 现在,如果我想用其他内容替换“ipsum”,我可以抓取#checkit with inn

我需要替换任意元素中的一部分文本。我不知道元素的任何结构,包括它可能具有的任何子元素,但我必须假设可能存在带有附加绑定的子元素。例如:

<div id="checkit">
  Lorem ipsum textum checkum.
  <input type="button" id="clickit" value="Click Me" />
</div>

益智草。
现在,如果我想用其他内容替换“ipsum”,我可以抓取#checkit with innerHTML的内容,在其上运行replace,然后用新文本设置其innerHTML,但是如果在#clickit上设置了绑定,则在更新innerHTML时绑定将丢失

我真的不需要或者不想替换元素的整个innerHTML,但是我不知道如何替换元素中的一部分文本

所以我的问题有两个:

  • 关于如何替换#checkit中的部分文本的建议
  • 关于如何在不丢失绑定的情况下替换innerHTML的建议(或者在内部保存绑定的方法#选中它并在替换innerHTML后重新应用它们)
  • 关于如何替换#checkit中的部分文本的建议

    您可以使用这种方法仅替换文本内容,而不干扰其中的任何元素

    $('#checkit').contents().each(function(){
        if(this.nodeType===3) //select only the text nodes
        {
          this.nodeValue = this.nodeValue.replace(/u/g,'Z'); //replace all u with z
        }
    });
    
    关于如何在不丢失绑定的情况下替换innerHTML的建议(或者在内部保存绑定的方法#选中它并在替换innerHTML后重新应用它们)

    如果要替换innerHTML并保持绑定完好无损,可以再次绑定事件,或者使用jquery中的
    .on()
    使用事件委派。因此,无论是现在还是将来,该事件都会附加到DOM中与选择器匹配的元素,而无需再次绑定它们


    请参见

    解决此问题的最佳方法是在另一个元素中添加文本,然后使用Jquery的prev()方法查找上一个元素

    您可以查看以下链接:

    HTML代码:

    <div id="checkit">
        <div >Lorem ipsum textum checkum.</div>
      <input type="button" id="clickit" value="Click Me" />
    </div>
    
    代码也在JSFIDLE上创建:


    请检查一下…

    不幸的是,.on()对我来说不是那么有效;即使使用.on()设置绑定,当innerHTML更改时它仍然丢失。除此之外,我正在处理由其他人设置绑定的任意内容,因此我无法控制它们的设置方式。不过,nodeValue提示提供了我想要的内容,所以谢谢@如果你能提供一个示例,我可以看一下。这一点应该起作用。可能是您的选择器导致了问题。另一个后续问题。这个答案在我的代码中起作用——有一个问题我应该从节点类型中意识到。我正在尝试将文本包装在标记中。例如,我曾经有过lipsum,现在有了lipsum。它可以工作-但是显示为文本而不是标记。对于包装,您可以参考我的另一个答案,谢谢您的答案,但是当我尝试匹配的文本可能不是在触发器之前时,它在任意内容中实际上不起作用。
    $ = jQuery.noConflict();
    $("#checkit").delegate('#clickit' , 'click' , function(){
       $(this).prev().html('your text here..');
    });