我制作了这个Greasemonkey脚本:
var maxpi = 250;
var p1 = "/html/body/div/div[2]/div/div[2]/table[2]/tbody/tr[1]/td[11]";
var p2 = "/html/body/div/div[2]/div/div[2]/table[2]/tbody/tr[2]/td[11]";
..
var p25 = "/html/body/div/div[2]/div/div[2]/table[2]/tbody/tr[25]/td[11]";
var r1 = "/html/body/div/div[2]/div/div[2]/table[2]/tbody/tr[1]";
var r2 = "/html/body/div/div[2]/div/div[2]/table[2]/tbody/tr[2]";
..
var r25 = "/html/body/div/div[2]/div/div[2]/table[2]/tbody/tr[25]";
var xpathPI1 = document.evaluate(p1, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
..
var xpathPI25 = document.evaluate(p25, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
var xpathrow1 = document.evaluate(r1, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
..
var xpathrow25 = document.evaluate(r25, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
if (xpathPI1.singleNodeValue.textContent >maxpi ){
xpathrow1.singleNodeValue.style.display='none';}
..
if (xpathPI25.singleNodeValue.textContent >maxpi ){
xpathrow25.singleNodeValue.style.display='none';}
基本上,它检查表格行的第11个字段,如果其内容>超过250它隐藏了这一行。
凭借我有限的JavaScript知识花了相当长的时间才能实现这一目标。
问题是如果我想检查隐藏另一行,我必须重写每一行 我想让它更有用,所以我可以在类似的表上使用它而不需要重写整个事情。
也许我需要使用不同的XPath类型或使用某种变化的变量?
答案 0 :(得分:1)
当然,还有更多方法可以改进您的脚本。
首先,您需要彻底思考您想要查找的内容。是每一行和每列?它是带有一些文本,类,任何其他属性的行/列吗?您甚至可以只选择文本值大于maxpi
!
阅读有关 XPath 的内容,可能最好的资源是official one。
关于XPath可能有用的一些随机想法:
//table//tr[5]/td[2] ... the double slash is the deal here
//table//tr/td[number(text()) > 250] ... the number() and text() functions
在谈论 JavaScript 时,这会有点困难,因为你可以使用很多东西!
仅限初学者 - 您可以按String concatenation和For loop创建动态更改的xpath表达式,如下所示:
for (var i = 1; i <= maxNumberOfRows; i++) {
var p1 = "//table/tbody/tr[" + i + "]";
// more work goes here...
}
此外,您可以使用arrays存储XPath表达式返回的多个节点,并使用一个命令处理它们。
对于更多JavaScript,我会推荐一些JavaScript tutorial的第一章,这将大大提高您的工作效率。
答案 1 :(得分:0)
使用循环和函数。这是一种方式:
hideRowsWithLargeCellValue (
"/html/body/div/div[2]/div/div[2]/table[2]/tbody/tr[",
25,
"]/td[11]",
250
);
function hideRowsWithLargeCellValue (xpathPre, maxRows, xpathPost, maxpi) {
for (var J = maxRows; J >= 1; --J) {
var srchRez = document.evaluate (
xpathPre + J + xpathPost,
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
);
if (srchRez.singleNodeValue && srchRez.singleNodeValue.textContent > maxpi) {
var rowToHide = srchRez.singleNodeValue.parentNode;
rowToHide.style.display='none';
}
}
}
然后阅读"Dont Repeat Yourself"(原文如此)。