3

我需要提取 HTML 文档正文中的所有粗体片段。我需要在服务器端使用 Java(而不是在浏览器上)

页面上的文本可以是粗体,因为标签,例如<b><h1>等,或者因为内联 CSS 样式style="font-weight:bold;",或者因为使用 CSS 类的外部 CSS 样式。

我正在使用 Jsoup,但我也可以使用任何其他库来完成这项工作。

谢谢你的时间!

4

4 回答 4

2

一个普通的 JavaScript 解决方案:在足够新的浏览器上,您可以使用该getPropertyValue方法来检索元素的计算样式。您可以遍历文档树并检查所有文本节点;文本节点没有样式,所以你需要检查他们的父母:

function consume(string) {
  console.log(string);
}
function traverse(tree) {
  var i;
  if(tree.nodeType === 3) {
    if(getComputedStyle(tree.parentNode).getPropertyValue('font-weight') === 'bold') {
      consume(tree.textContent);
    }
  }
  for(i = 0; i < tree.childNodes.length; i++) {
    traverse(tree.childNodes[i]);
  }
}
traverse(document.body);

替换consume为您自己的处理粗体文本的函数。

即使声明为, 的计算值似乎font-weight也是如此。bold700

请注意,这只会选取字体粗细专门设置为粗体 (700) 的文本。计算出的字体粗细为 600、800 或 900 的元素很可能会以粗体显示(当然取决于字体的可用性)。可以通过对测试进行明显的修改来覆盖它们。

于 2013-05-13T10:31:45.980 回答
1

你可以使用getElementsByTagName()

http://www.w3schools.com/jsref/met_doc_getelementsbytagname.asp

另外,可能有用querySelectorAll

https://developer.mozilla.org/en-US/docs/DOM/Document.querySelectorAll

祝你好运,丹尼尔

于 2013-05-13T10:01:23.970 回答
1

对于标签和内联样式(例如直接添加到 html 中的样式,不包含在外部 css 样式表中),您可以使用 css 选择器链接。(对于内联样式,它将是[style*="font-weight:bold;"])。

于 2013-05-13T10:02:29.223 回答
0

只需通过标签名称获取元素,然后循环:

elem = document.getElementsByTagName("b");

for(i=0;i<elem.length;i++) {
    console.log(elem[i].innerText)
}
于 2020-12-18T05:29:03.970 回答