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

如何在ul中仅打印li的指定文本而非嵌套p的内容?

解决点击li时获取非嵌套p标签的文本内容问题

问题根源

HTML结构里的换行、空格会被解析成空白文本节点,直接用firstChild大概率拿到的是这些空白内容,而非li里的目标文本,导致后续判断逻辑无法触发。

可行解决方案

方案1:筛选li的直接文本节点

遍历li的所有子节点,筛选出非空白的文本节点,提取并整理内容:

const lis = document.querySelectorAll('#list li');
lis.forEach(li => {
  li.addEventListener('click', function() {
    const validTextNodes = Array.from(this.childNodes).filter(node => {
      return node.nodeType === Node.TEXT_NODE && node.textContent.trim() !== '';
    });
    const choice = validTextNodes.map(n => n.textContent.trim()).join('');
    console.log(choice);
    // 这里写入你的判断逻辑
  });
});

方案2:克隆节点后移除p标签

克隆当前li节点,移除其中的p标签,再提取剩余文本(适合li内文本分散在p前后的情况):

const lis = document.querySelectorAll('#list li');
lis.forEach(li => {
  li.addEventListener('click', function() {
    const liClone = this.cloneNode(true);
    liClone.querySelectorAll('p').forEach(p => p.remove());
    const choice = liClone.textContent.trim();
    console.log(choice);
    // 判断逻辑
  });
});

方案3:遍历子节点寻找第一个有效文本

如果目标文本是li里第一个非空白的文本内容,可以逐个遍历子节点找到它:

const lis = document.querySelectorAll('#list li');
lis.forEach(li => {
  li.addEventListener('click', function() {
    let choice = '';
    let currentNode = this.firstChild;
    while (currentNode) {
      if (currentNode.nodeType === Node.TEXT_NODE && currentNode.textContent.trim()) {
        choice = currentNode.textContent.trim();
        break;
      }
      currentNode = currentNode.nextSibling;
    }
    console.log(choice);
    // 判断逻辑
  });
});

内容的提问来源于stack exchange,提问作者Joe.sexton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:04:52