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

如何不依赖jQuery实现类似PHP strip_tags的HTML标签过滤功能

原生JavaScript实现HTML标签过滤方案

完全匹配需求逻辑:仅剥离非法标签、保留标签内的文本和合法子标签,无第三方依赖,输入输出均为HTML字符串。

核心实现代码

function sanitizeHtml(inputHtml, validTags = ['b', 'strong', 'i', 'em', 's', 'a', 'img', 'blockquote', 'ul', 'li']) {
  // 转换为小写集合,提高查找效率同时兼容标签大小写写法
  const validTagSet = new Set(validTags.map(tag => tag.toLowerCase()));
  // 浏览器原生API解析HTML字符串为DOM结构
  const parser = new DOMParser();
  const doc = parser.parseFromString(inputHtml, 'text/html');
  // 获取所有元素节点,倒序遍历保证先处理内层节点避免结构变更影响
  const allElements = Array.from(doc.body.querySelectorAll('*'));
  for (let i = allElements.length - 1; i >= 0; i--) {
    const currentEl = allElements[i];
    if (!validTagSet.has(currentEl.tagName.toLowerCase())) {
      // 将非法标签的所有子节点移动到父节点对应位置
      while (currentEl.firstChild) {
        currentEl.parentNode.insertBefore(currentEl.firstChild, currentEl);
      }
      // 移除空的非法标签节点
      currentEl.remove();
    }
  }
  // 返回处理后的HTML字符串
  return doc.body.innerHTML;
}

若需要进一步过滤合法标签的属性(比如仅保留a标签的href属性、过滤其他自定义属性),可在合法标签的判断分支内添加属性遍历清理的逻辑即可。

使用示例

// 输入待处理的HTML字符串
const rawHtml = `
<blockquote>
  <p>Lorem ipsum dolor...</p>
  <footer>
  By <a href="https://www.github.com/someuser"><strong>Some User</strong></a>
    in March, 13
  </footer>
</blockquote>
`;

// 调用过滤方法
const cleanedHtml = sanitizeHtml(rawHtml);

// 输出结果可直接用于客户端渲染
console.log(cleanedHtml);

输出效果说明

原HTML中的p、footer标签不在合法标签列表中,会被直接剥离,标签内的文本和合法的a、strong标签会被完整保留,和原jQuery实现的效果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:02