You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jsoup如何移除元素所有子元素且保留自身文本内容

问题原因

jQuery的empty()方法会清空目标元素的所有子节点,包含元素节点、文本节点、注释节点在内的所有内容都会被移除,你要保留的“Name”属于label元素的直接子文本节点,自然也会被同步删除。

解决方案

jQuery 方案(最简)

直接调用children().remove()即可,jQuery的children()方法只会匹配元素的直接子元素节点,不会包含文本、注释等非元素节点,移除后就能保留元素本身的文本内容:

$('label.field__label').children().remove()

原生 JavaScript 方案

如果不依赖jQuery,可以遍历子节点过滤掉元素节点后删除,或者用replaceChildren方法实现:

const targetEl = document.querySelector('.field__label')
// 方法1:遍历删除子元素节点
for (let i = targetEl.childNodes.length - 1; i >= 0; i--) {
  if (targetEl.childNodes[i].nodeType === Node.ELEMENT_NODE) {
    targetEl.removeChild(targetEl.childNodes[i])
  }
}

// 方法2:replaceChildren 一键替换
targetEl.replaceChildren(...[...targetEl.childNodes].filter(node => node.nodeType !== Node.ELEMENT_NODE))

效果验证

假设你的label存在子元素时的结构如下:

<label class="field__label" for="1">
  Name
  <span class="required">*</span>
  <input type="hidden" name="hideField">
</label>

执行上述方法后,最终得到的结构就是你需要的保留文本、移除所有子元素的效果:

<label class="field__label" for="1">Name</label>

你当前的示例本身没有子元素,执行方法后不会产生任何变更,完全符合预期。

内容的提问来源于stack exchange,提问作者Anoop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:24:06