jQuery - 仅设置元素的文本而不删除其他元素(锚点)

J.C*_*cio 30 javascript jquery

我有这样一个元素:

<td>
  <a>anchor</a>
  [ some text ]
</td>
Run Code Online (Sandbox Code Playgroud)

我需要在jQuery中设置它的文本,而不删除锚点.

元素的内容可能按顺序变化(文本在之前或之后),实际文本是未知的.

谢谢

新的更新

这就是我使用的,只假设一个文本节点:

    function setTextContents($elem, text) {
        $elem.contents().filter(function() {
            if (this.nodeType == Node.TEXT_NODE) {
                this.nodeValue = text;
            }
        });
    }

    setTextContents( $('td'), "new text");
Run Code Online (Sandbox Code Playgroud)

Jua*_*des 38

尼尔的回答是我的建议.jQuery没有办法选择文本节点如何用jQuery选择文本节点?.

更改HTML结构将使最简单的代码.如果你不能这样做,你可以使用childNodes属性寻找类型3的节点(TEXT_NODE)

下面是一些示例代码,假设最后一个节点是您要编辑的节点.这是一种比替换td的整个内容更好的方法,因为在重新创建HTML时可能会丢失事件处理程序

$('a').click(() => console.log('<a> was clicked'))

$('#btn').click(() =>
  $('.someClass').get(0).lastChild.nodeValue = " New Value");
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='someClass'>
  <a href="javascript:void(0)">anchor</a> [ some text ]
</div>

<button id='btn'> Change text without losing a tag's handler</button>
Run Code Online (Sandbox Code Playgroud)


Nea*_*eal 6

如果可以将文本放在一个范围内:

<td id='someID'>
  <a>anchor</a>
  <span>[ some text ]</span>
</td>
Run Code Online (Sandbox Code Playgroud)

你可以做:

$('td#someID span').text('new text')
Run Code Online (Sandbox Code Playgroud)

  • Downvoted.这不是他要问的解决方案,这是一个简单的方法. (2认同)
  • @JuanMendes 在某些情况下,您无法控制 HTML,否则会导致进行霰弹枪编辑以收集对 HTML 的控制:想象一下,您使用 CMS 的一些标准模板,仅更改一小部分 HTML 就会导致复制粘贴操作到自定义模板中,可能还有一些配置工作来集成它。 (2认同)