我想使用chrome dev工具和控制台,从控制台中的HTML表创建一个有组织的表或数组。到目前为止,我返回的是所有span元素的长字符串:
$('tbody > tr > td > span').text();
有人能够教我如何在HTML表中为每一行创建一个数组吗?
(参考网址:https://www.copart.com/lotSearchResults/?free=true&query=,您可以看到表中的任何元素都没有类或ID)
编辑:注释中要求的表结构
<tr>
<td><span data-uname="lotsearchLotnumber">1997</span>
<td><span data-uname="lotsearchLotnumber">FORD</span>
<td><span data-uname="lotsearchLotnumber">45</span>
</tr>
<tr>
<td><span data-uname="lotsearchLotnumber">1998</span>
<td><span data-uname="lotsearchLotnumber">FORD</span>
<td><span data-uname="lotsearchLotnumber">40</span>
</tr>
...
我想像这样输出一个数组:
[1997, FORD, 45]
[1998, FORD, 40]
...
最佳答案
查看该站点,您将不得不多解释一些您期望输出看起来像什么。您需要使用图像,一些按钮,评级和标准文本,因此您需要一些其他逻辑来嗅探这些内容。
但是,一般而言,这是如何获取给定HTML表并将其转换为对象数组的一个很好的起点。在此示例中,假设您的table
包含thead
和tbody
格式。如果没有,则可以将其从代码中删除。
此外,我还要指出,如果您只是想下载一些数据而实际上并不需要“永久解决方案”,则应该研究诸如this之类的网络抓取工具
const htmlToArray = (tableElement) => {
const thead = tableElement.querySelector('thead');
const tbody = tableElement.querySelector('tbody');
// Assumes there's only one header row
const columns = thead.querySelectorAll('tr th');
const columnNames = [];
columns.forEach( c => columnNames.push(c.innerText));
const result = [];
const bodyRows = tbody.querySelectorAll('tr');
bodyRows.forEach( r => {
const tds = r.querySelectorAll('td');
const obj = {};
tds.forEach( (td, idx) => {
obj[columnNames[idx]] = td.innerText;
});
result.push(obj);
});
return result;
};
const table = document.querySelector('table');
console.log(htmlToArray(table));
<table>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Data1</td>
<td>Data2</td>
<td>Data3</td>
</tr>
<tr>
<td>Data4</td>
<td>Data5</td>
<td>Data6</td>
</tr>
<tr>
<td>Data7</td>
<td>Data8</td>
<td>Data9</td>
</tr>
</tbody>
</table>
关于javascript - 将表的queryquerySelector()放入数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56031662/