javascript - 替换元素内的文本

标签 javascript jquery

我需要替换任意元素内的部分文本。我对元素的结构一无所知,包括它可能具有的任何子元素,但我必须假设可能存在带有附加绑定(bind)的子元素。一个例子可能是:

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

现在,如果我想用其他东西替换“ipsum”,我可以用 innerHTML 抓取#checkit 的内容,在其上运行替换,然后用新文本设置它的 innerHTML,但是如果已经设置了绑定(bind)#clickit,更新innerHTML时绑定(bind)会丢失。

我真的不需要或不想替换元素的整个 innerHTML,但我不确定如何替换元素中的部分文本。

所以我的问题是双重的:

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

最佳答案

Suggestion on how to replace a portion of text within #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
    }
});

Demo

Suggestion on how to replace innerHTML without losing bindings (or a way to save bindings inside #checkit and reapply them after replacing innerHTML)?

如果您想替换 innerHTML 并保持绑定(bind)不变,您可以再次绑定(bind)事件或使用 jquery 中的 .on() 使用事件委托(delegate)。因此该事件将附加到 DOM 中现在和 future 的元素,与选择器匹配,而无需再次绑定(bind)它们。

参见 documentation

关于javascript - 替换元素内的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16804041/

相关文章:

javascript - 如何在初始加载时将每个分辨率的位置值设置为相同?

c# - 用户退出时的 Safari OnUnload 事件

javascript - 在 iOS 上同时录制和播放(Phonegap 构建)

带有 Codeigniter 的 JQuery Noty

jquery - 不同的没有。不同屏幕分辨率下的列数

javascript - 如何使用 $(target) inside 指令?

javascript - 在Node-Red中解析JSON JavaScript

javascript - Foundatoin 揭示 : foundation. core.js:190 TypeError: 无法读取未定义的属性 'register'

javascript - jQuery - 选择带有 $(this) 的 child

javascript - 页面外的 JQuery Mobile Popover