我正在尝试在表格中获取<tr>
元素的子元素。我需要获取每个<td>
个单元格。我不能使用jQuery,只能出于基础设施的原因使用JavaScript。我的JavaScript看起来像这样:
var feeTable = document.getElementById("feeTable");
function gatherRowData() {
console.log("gathering row data");
var rows = this.parentNode.children; //This is where it fails.
var state = rows[0].innerText;
var county = rows[1].innerText;
var city = rows[2].innerText;
console.log("state: " + state);
document.getElementById("state_code").value = state;
document.getElementById("county_name").value = county;
document.getElementById("city_name").value = city;
}
//Loop through Vehicle Fee Changes to find any empty cells in county, city, or start date.
for (var i = 0; row = feeTable.rows[i]; i++) {
var county = row.cells[1];
var city = row.cells[2];
var startDate = row.cells[6];
if (county.innerText == "") {
county.style.backgroundColor = "#FF0000";
showError(invalidCells);
}
if (city.innerText == "") {
city.style.backgroundColor = "#FF0000";
showError(invalidCells);
}
if (startDate.innerText == "") {
startDate.style.backgroundColor = "#FF0000";
showError(invalidCells);
}
if (document.addEventListener) {
row.cells[8].addEventListener("click", gatherRowData);
} else if (document.attachEvent) { //Support for IE
row.cells[8].attachEvent("onclick", gatherRowData);
}
}
&#13;
onClick侦听器工作正常,但是当我尝试获取表行的子代时,它会给我错误:Error message: Unable to get value of the property '0': object is null or undefined
它在所有其他浏览器中都能正常工作,并且没有兼容模式的IE9(它需要在兼容模式下运行)。我错过了什么才能让我得到tr
元素的孩子?
答案 0 :(得分:0)
当feeTable具有空值
时,可能会发生此错误var feeTable = document.getElementById("feeTable");
尝试在控制台中写入feeTable的值,并检查它是否具有除null之外的正确值。
答案 1 :(得分:0)
我找到了解决问题的方法。事实证明,当您使用attachEvent附加事件侦听器时,JavaScript事件处理函数中对this
的引用实际上并未引用正在单击的对象。它代表整个Window对象。我不得不使用稍微不那么优雅的解决方案:
row.cells[8].onclick = gatherRowData;
这是唯一适用于不支持addEventListener
的IE版本的解决方案。使用此解决方案,我的其余代码工作正常,this
引用了<td>
元素。