【发布时间】:2013-05-25 16:09:31
【问题描述】:
使用这样的 HTML:
<div id="container">
<p>Lorem ipsum lorem ipsum
<p>This is the second!
<span data-attribute="my-span">Hello World</span>
</p>
</p>
</div>
我想找到从容器到我的跨度的文本长度。因此,通过计算后代的指数,我得到了 42 个正确答案。
但如果我有这样的 HTML:
<div id="container">
<p>Lorem ipsum lorem ipsum
<p>This is the second!
<span data-attribute="my-span">Hello World</span>
</p>
Some preceding HTML that I dont want!
</p>
</div>
我不希望字符计数继续我的跨度。我只希望字符数达到我的跨度,所以正确答案仍然是 42。但是通过计算子文本长度,它还会添加到前面的文本和跨度的文本中(这很容易通过减去它来消除从总数中)。
我已经探索了列出 html 并将子字符串设置为我想要的 span 属性,拆分结尾并解析出 html,只留下我想要计算的文本字符。但这似乎过于复杂。
我也在考虑使用 wicked good xpath 之类的东西来查找直到我要查找的节点的所有节点,然后总结文本。
我还查看了仅列出直到某个点的所有文本节点并将它们求和,但它在我的跨度文本之前列出了孩子的前面文本,因此它的求和顺序不正确。
此外,嵌套可能有 n 层深,所以不要假设只有一层。
对实现这一目标的最佳方式有何建议?
【问题讨论】:
-
我认为最简单的方法是从底部开始,然后在 while 循环中逐步恢复。选择
span,并继续计算父母直到你到达容器div。 -
@shaun5 父母将包含该文本 - 以及跨度文本,因此需要更复杂的节点计数方法,例如 Jans 解决方案。
标签: javascript jquery dom