我需要访问具有特定值的td,但是这样做,我需要另外确定该特定值所在的行号和td号(表随时间变化,我需要通用方法)。我考虑过要在两个循环中对行号和单元格号进行计数,因此一旦找到搜索值,就可以提取其行号和单元格号。问题是,一旦我开始遍历行,如何访问每一行的所有tds?
const rows = await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr');
for (var i = 0; i < rows.length; i++) {
// how to iterate over the tds?
}
答案 0 :(得分:0)
如果您每次都知道表列号完全相同,则可以通过仅选择td来循环它。在一个循环内创建一个循环很难维护,并且基本上比仅一个循环慢。 例如,您的表包含5列。
let this_row, this_col;
let column = 5; // Specify your column number here
const data = await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr > td');
for (let i = 0; i < data.length; i++) {
// Here you can find row number for every td by doing this
this_row = Math.ceil( (i + 1)/column )
// Here you can find column number by doing this
this_col = (i + 1) % column
}
如果您的表是动态的,并且具有未知的特定列和行数,那么您的代码将像这样。
let this_row, this_col;
const data = await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr > td');
const row_num = (await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr > td:nth-child(1)')).length;
const column = data.length / row_num;
for (let i = 0; i < data.length; i++) {
// Here you can find row number for every td by doing this
this_row = Math.ceil( (i + 1)/column )
// Here you can find column number by doing this
this_col = (i + 1) % column
}
答案 1 :(得分:0)
取决于您要执行的操作,但这是获取element和Element(在您的情况下为特定td)的索引的方法之一。
const rows = await page.$$('.CalendarMonthGrid > :nth-child(1) > div > table > tbody > tr');
rows.map((trNode, index) => {
// here you have access to your node + index of it
});