javascript - DOM Javascript - 获取单元格内容
问题描述
我正在尝试通过我的 Chrome 扩展从表中检索多个元素,以对每一列进行平均(这是一个成绩单)。
该表如下所示:
我的 JavaScript 脚本循环当前是:
var countChildren = document.getElementById('karakter_tabel').childElementCount;
for (var i = 0; i < countChildren; i++) {
if (i != 0) {
var countTRchildren = document.getElementById('karakter_tabel').getElementsByTagName('tr')[i].childElementCount;
for (var tr = 0; tr < countTRchildren; tr++) {
var x = GetinnerHTML.rows[i].cells[tr];
console.log(x);
}
}
}
它返回(对于每个单元格):
<td class="textCenter">
<div class="textCenter"
title="XPRSFag: 4831B Samtidshistorie Kilde: Karakter Vægt: 1,5">
4
</div>
</td>
我需要的每个单元格的元素是:
- DIV 的 innerHTML(在本例中为“4”,即等级)。
- 标题字符串的最后一个字符(在本例中为“1,5”,即等级权重)。
如前所述,我需要获得每列的平均值,最好使用“Karakter Vægt:1,5”,因为它是“等级重量”的百分比。
所以我需要内部循环返回:
x = ["4", "1,5"];
我对用 JavaScript 编写脚本还很陌生,所以我还有很多东西要学。:)
感谢您抽出宝贵时间阅读本文,我愿意接受任何建议,如果我能以任何方式更准确,请告诉我...
解决方案
看来您实际上需要<div>
在单元格内定位;查询其文本内容和标题值。一种可能的方式:
for (var tdi = 0; tdi < countTRchildren; tdi++) {
var td = GetinnerHTML.rows[i].cells[tdi];
var div = td.querySelector('div');
var textContent = div.textContent;
var title = div.getAttribute('title');
var no = title.match(/([0-9,.]+$)/);
// there should be a collecting code instead
console.log(title.trim(), no && no[0]);
}
但实际上,我会将您的代码重新组织为两个部分。
第一个应该只关心收集单元元素并将它们组织成某种数据结构。例如,所有的单元格内部似乎都有div.textContent
选择器 - 因此可以通过一个简单的querySelectorAll
调用来收集它们。
第二个应该只关心从给定单元格中检索信息。理想情况下,它应该是一个接收单元格作为参数的函数,并返回一个包含必填字段的对象。
推荐阅读
- javascript - window.print() 不在动态生成的文本上应用文本颜色
- c# - 如何在 Visual Studio 2017 中以编程方式捕获 Web 方法调试行
- css - 使用 Chrome 扩展调整 CSS
- graph - Grafana SingleStat:超过阈值的时间百分比
- sql - SQL Left Join - 在一个条件下加入,默认为另一个条件
- selenium - 如何解决“不推荐使用构造函数 ChromeDriver(Capabilities)”和 WebDriverException:ChromeDriver 和 Chrome 超时错误
- git - 如何在不冒两个项目相互偏离的风险的情况下分离公共/私有代码?
- vba - FormulaR1C1 动态参考
- angular - Nativescript,方法帖子
- r - 匹配不同模式的正则表达式