【问题标题】:Get text after certain element (JavaScript or JQuery) [duplicate]在特定元素(JavaScript或JQuery)之后获取文本[重复]
【发布时间】:2018-06-04 07:35:43
【问题描述】:

谁能给我一些指导,告诉我什么是最好的方法。

我正在尝试获取“.main”之后的所有文本

我知道这可能很简单,但就在圣诞节前一整天,它一直在我的脑海中挥之不去。所以我想与其给自己压力,不如寻求一些指导。

示例代码只带回Text in P tag,但我想带回Text not in it's own elementp tag

console.log($("#container").find(".main").next().text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="container">
  <div class="main"> WOOP IN MAIN </div>
  Text not in it's own element
  <p> Text in P tag </p>
</div>

【问题讨论】:

  • 这种情况下 DOM 是不可变的吗?
  • 尝试nextSibling作为元素后的文本,而不是nextElementSibling

标签: javascript jquery


【解决方案1】:

实现这一点的最简单方法是clone()容器,从中删除.main元素,然后获取text(),如下所示:

var text = $("#container").clone().find('.main').remove().end().text();
console.log(text.trim());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="container">
  <div class="main"> WOOP IN MAIN </div>
  Text not in it's own element
  <p> Text in P tag </p>
</div>

您也可以递归遍历 .main 元素之后的 DOM 节点,但这要复杂得多,而且结果相同。

【讨论】:

  • 你该死的打败我了。'
  • 你这个天才罗里! :) 谢谢你帮助我。圣诞节前我一直在强调自己。
  • 很好的解决方案,但请注意,当您在 .main 之前的容器 div 中有内容时,它也会显示出来。 @Carl Edwards 的答案没有这个限制
  • @Archer 在这种情况下,您需要在选择 main 后使用 prevAll() 并删除它们。
  • @BananasSplitter true,但该解决方案只期望有 2 个以下元素。这将适用于无限数量的后续兄弟元素或节点。两者都可以,这取决于您的具体情况。
【解决方案2】:

这是因为Text not in it's own element 被认为是text 节点,因此next() 将定位&lt;p/&gt; 标记,因为它是HTMLElement。如果您要使用本地,您将使用nextSibling 的组合,它与两种节点类型无关,而nextElementSibling,正如它的方法名称所暗示的那样,抓取下一个兄弟元素

const main = document.querySelector('.main');

const txt = [
  main.nextSibling.textContent.trim(),
  main.nextElementSibling.textContent.trim()
];

console.log(txt)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="container">
  <div class="main"> WOOP IN MAIN </div>
  Text not in it's own element
  <p> Text in P tag </p>
</div>

【讨论】:

  • 你为什么使用const?这是现在不喜欢var的新时尚吗?
  • 使用var 时,您会面临意外提升和/或重新分配的风险。除此之外,Javascript 变量是动态类型的,这也可能导致意外行为。最佳做法是在适用的情况下使用const。对var 没有不喜欢。只是保持代码至少可预测的问题。
  • @CarlEdwards 你将如何调整它以删除文本?
  • @ChrisBeckett 你指的是什么文字?
  • @CarlEdwards Text not in it's own element &lt;p&gt; Text in P tag &lt;/p&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2021-11-04
  • 2017-04-23
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多