我需要提取 HTML 文档正文中的所有粗体片段。我需要在服务器端使用 Java(而不是在浏览器上)
页面上的文本可以是粗体,因为标签,例如<b>
,<h1>
等,或者因为内联 CSS 样式style="font-weight:bold;"
,或者因为使用 CSS 类的外部 CSS 样式。
我正在使用 Jsoup,但我也可以使用任何其他库来完成这项工作。
谢谢你的时间!
一个普通的 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
也是如此。bold
700
请注意,这只会选取字体粗细专门设置为粗体 (700) 的文本。计算出的字体粗细为 600、800 或 900 的元素很可能会以粗体显示(当然取决于字体的可用性)。可以通过对测试进行明显的修改来覆盖它们。
你可以使用getElementsByTagName()
http://www.w3schools.com/jsref/met_doc_getelementsbytagname.asp
另外,可能有用querySelectorAll
https://developer.mozilla.org/en-US/docs/DOM/Document.querySelectorAll
祝你好运,丹尼尔
对于标签和内联样式(例如直接添加到 html 中的样式,不包含在外部 css 样式表中),您可以使用 css 选择器链接。(对于内联样式,它将是[style*="font-weight:bold;"]
)。
只需通过标签名称获取元素,然后循环:
elem = document.getElementsByTagName("b");
for(i=0;i<elem.length;i++) {
console.log(elem[i].innerText)
}