我正在编写Greasemonkey脚本,因此无法更改源XHTML。
给出以下XHTML片段:
<td>
<span class="entry">Gender, Age:</span> Female, 42<br>
<span class="entry">Country, Town:</span> United Kingdom, London
<span class="small09"></span>
</td>
是否可以编写一个可以使用document.evaluate进行评估的表达式,这样我就可以选择年龄大于40的所有条目?我想要以下内容:
var matches = document.evaluate("//table[tbody/tr[2]/td[1][number(SOMEHOW
MATCH THE AGE PART) > 40]]",
document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
由于
答案 0 :(得分:1)
使用强>:
//table[tbody/tr[2]/td[1]
[number(
substring-after(normalize-space(span[1]/following-sibling::text()[1]),
',')
)
>
40
]
]
答案 1 :(得分:0)
如果您将年龄设置为属性,则可以访问该值。
像
这样的东西<Person Gender="F" Age="42" />
答案 2 :(得分:0)
您不能在文字内容上使用条件,但您可以使用JavaScript过滤结果。
这样的事情应该有效:
var targetCells = document.evaluate (
"//table/tbody/tr[2]/td[1]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (var J = targetCells.snapshotLength - 1; J >= 0; --J)
{
var thisCell = targetCells.snapshotItem (J);
//--- Get the age. Key off (fe)male, {age in decimal years}<br> in the text of the table cell
var ageTxt = thisCell.textContent.match (/male[, ]+(\d+)/i);
if (ageTxt && ageTxt.length > 1)
{
var age = parseInt (ageTxt[1]);
if (age > 40)
{
//-----------------------
//--- DO YOUR STUFF HERE.
//-----------------------
}
}
}