我正在检查页面的 HTML 呈现:http: //gothamist.com/2010/07/18/wikileaks_founder_no-show_at_nyc_ha.php
如果您查看此图像,您会看到当我查看 DOM 时,会出现奇怪的字符中断,并带有“作为评论者”的引号
http://img153.imageshack.us/f/screenshot20100730at840.png/
知道这些是什么以及我如何将它们从 DOM 中剥离出来以获得干净、连续的文本吗?
谢谢!
我正在检查页面的 HTML 呈现:http: //gothamist.com/2010/07/18/wikileaks_founder_no-show_at_nyc_ha.php
如果您查看此图像,您会看到当我查看 DOM 时,会出现奇怪的字符中断,并带有“作为评论者”的引号
http://img153.imageshack.us/f/screenshot20100730at840.png/
知道这些是什么以及我如何将它们从 DOM 中剥离出来以获得干净、连续的文本吗?
谢谢!
这就是 WebKit 检查器表示TextNode的方式
您会看到不止一个 textnode 环绕锚标记。
如果你childNodes
为那个 div 转储,它看起来像这样:
0: Text
1: HTMLParagraphElement
2: HTMLDivElement
3: Text
4: Text
5: HTMLAnchorElement
6: Text
7: HTMLAnchorElement
8: Text
9: HTMLParagraphElement
10: Text
11: HTMLParagraphElement
12: Text
13: HTMLParagraphElement
14: Text
在元素检查器中,那些标记为的节点Text
将用引号括起来。这只是元素检查器的一个功能。
知道这些是什么以及我如何将它们从 DOM 中剥离出来以获得干净、连续的文本吗?
部分浏览器支持innerText
例如,在该站点上运行:
document.querySelector('.asset-body').innerText
这些不是真正的元素,而是文本节点,它们应该是。HTML 元素包含文本节点。
<p>text</p>
该paragraph
元素不包含元素,它包含一个文本节点。
不过,我注意到的一件事是您的标记无效,因此,Firefox 中的 DOM 树与 Chrome 不一致。
“作为评论者”的文本节点应该是该段落的子节点,但是Chrome 中span
包含 的(由该段落拥有)的无效性div
使其关闭,p
因此该文本节点成为同级节点。当 HTML 解析器创建树时,它到达<div>
并意识到它已经在 ap
和a 中,span
并且 aspan
不能包含 adiv
所以它关闭p
并创建一个新元素,即div
.
Firefox 的 DOM 树是宽松的,实际上允许嵌套继续进行。这是您所指的文本节点位置不一致的原因。
基本上你有这个:
<p><span><div>blah</div></span>As a commentor</p>
Chrome 把它变成
<p><span></span></p><div>blah</div>As a commentor
Firefox 让它逍遥法外
<p><span><div>blah</div></span>As a commentor</p>
解决方案:验证您的 HTML,不要让span
包含div
:
正确标记后,您会看到文本节点应该位于p
.
这可能是你的浏览器。FireBug 中没有这样的东西。