本文介绍使用原生 JavaScript 遍历 DOM 树,安全地去除指定容器(如 #left)内所有文本节点的首尾空格及中间多余空格,同时保留标签结构、单词间正常空格和可读性——兼容任意嵌套深度与未知内容类型。
本文讲解如何使用原生 javascript 遍历 dom 树:在不损伤标签结构、单词间正常空格及可读性的前提下,安全清除指定容器(如 `#left`)内全部文本节点的首尾空格和中间冗余空格,并兼容任意嵌套深度与未知内容类型。
HTML 内容在前端开发中经常因格式化缩进或换行而包含大量不可见的空白字符,例如空格、制表符和换行符。渲染虽然不受这些字符影响,但数据提取、比对、序列化或服务端处理可能因此出现问题。由于 jQuery 没有用于递归修剪文本节点的内置方法,.trim() 只能处理字符串,而粗粒度调用 .html() 或 .text() 又会破坏结构或导致语义丢失,所以必须手动遍历 DOM 树,对每个文本节点进行精准处理。
整体处理思路如下:对目标元素的全部子节点进行深度优先遍历,先识别文本节点(nodeType === 3),再对它的 textContent 执行 trim() 以移除首尾空白,并通过正则 / +/g 把多个连续空格压缩成单个空格;对于不含任何非空白字符 S 的纯空白文本节点则直接跳过,以免清空有效内容。
实现方案兼顾完整性与健壮性:底层调用原生 DOM API,同时适配 jQuery 环境。
$("#remove").click(function() { const root = document.getElementById('left'); function traverse(node) { node.childNodes.forEach(child => { // 递归处理元素节点(标签) if (child.nodeType === Node.ELEMENT_NODE) { traverse(child); } // 处理文本节点:去首尾空格 + 合并中间多余空格 else if (child.nodeType === Node.TEXT_NODE) { const text = child.textContent; // 仅处理含可见字符的文本节点(跳过纯空白) if (/S/.test(text)) { const cleaned = text.trim().replace(/s+/g, ' '); child.textContent = cleaned; } } }); } traverse(root);});
✅ 关键特性包括:
立即学习“前端免费学习笔记(深入)”;
⚠️ 需要注意:
最后,可以使用以下代码检验效果,点击按钮即可实时观察 HTML 源码的变化:
$("#show").click(function() { $('#preview').text($('#left').prop('outerHTML'));});
<div id="preview" style="white-space: pre-wrap; font-family: monospace; background:#f5f5f5; padding:10px; margin-top:10px;"></div>
经过现代浏览器的充分验证,这一专业级实践能够解决“深层 HTML 空白净化”问题。