【问题标题】:Removing &nbsp element from a div element从 div 元素中删除 &nbsp 元素
【发布时间】:2021-09-16 08:04:58
【问题描述】:

我正在尝试研究一个删除   的逻辑。元素(如果它存在于 div 元素中)。我尝试了替换   的逻辑元素如下:

(div.html().replace(/^\s* /m, ''));

但我要处理的场景的问题是,我想删除仅存在于元素的直接子级的 &nbsp 元素,即假设我们有以下 html 内容:

<div class="block">
  <table>
    <tr>
      <td>
       &nbsp; 1 
      </td>
    </tr>
    <tr>
      <td>
        2
      </td>
    </tr>
  </table>
  &nbsp;
</div>

将类名 block 的 div 元素视为我们要采用的父元素。在这里,我只想查看该元素的子元素,而不是那些子元素中的子元素,这意味着   inside 元素不应该被纳入图片,只有  最后(在桌子结束后)是我想要删除的。谁能想到解决这个问题的办法?

谢谢

【问题讨论】:

  • “有人能想出解决这个问题的方法吗?” - 当然,不要再用正则表达式在 HTML 上乱搞了,改用 DOM 方法……循环div 的子节点,如果它们只是文本节点,请检查它包含的内容。 (您可以为 that 部分应用正则表达式,将其替换为单个文本节点的内容。)
  • @CarstenLøvboAndersen 据我所知,这就是 OP 目前正在做的事情,这也删除了单元格内的 &nbsp,这是他们不想要的
  • 你需要这个:developer.mozilla.org/en-US/docs/Web/API/Node/childNodes(jQuery 在这里没用)匹配 textNodes 的合适正则表达式是/^((&amp;nbsp)|\s)+$/
  • 这能回答你的问题吗? How do I select text nodes with jQuery?

标签: javascript html jquery


【解决方案1】:

测试div的每个子节点,去掉nodeName为'#text'的节点,checking the nodeValue for the character code的结果为真。

const div = document.querySelector('.block');
const regex = /(\u00a0).+/;

function remove(div) {
  const nodes = div.childNodes;
  console.log(`Current nodes: ${nodes.length}`);
  nodes.forEach(node => {
    if (node.nodeName === '#text') {
      if (regex.test(node.nodeValue)) {
        div.removeChild(node);
      }
    }
  });
  console.log(`Remaining nodes: ${nodes.length}`);
}

remove(div);
<div class="block">
  <table>
    <tr>
      <td>
       &nbsp; 1 
      </td>
    </tr>
    <tr>
      <td>
        2
      </td>
    </tr>
  </table>
  &nbsp;
  &nbsp;table
</div>

【讨论】:

  • 感谢您的回复,但是当我们执行以下 if 检查时:if (/\u00a0/g.test(node.nodeValue))像“ table”,因为我们使用 test() 进行比较,所以我们也从列表中删除了这个节点,忽略了文本内容。
  • 只需调整正则表达式。我已经更新了我的答案。
  • 我试过这样做,但我在这里看到的问题有时是我对内容的响应,空白数据似乎是这样的:\n\t\t\t 而不是 &nbsp ;这看起来很奇怪,由于这个原因,这个空格没有被处理:/
  • 添加到上一条评论中,该序列似乎也像我在第一条评论中提到的那样附加到文本数据中:“\n\t\t\tsample text”
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多