Internet Explorer 在 JavaScript 中不执行某些 if-case
Internet Explorer does not execute some if-cases in JavaScript
我正在使用 xslt 创建一个 html 文件。我有一些 JavaScript 代码来过滤一些表格行。在 Internet Explorer 11 上,我的 JavaScript 的一些特定 if-cases 没有被执行,我不知道为什么,因为我的开发控制台没有错误。
您可以在下面看到一些 JavaScript 代码,其中包含用于已执行和未执行的 if-cases 的命令。
如果我将 if (i > 2 && modelRange.textContent != rows[i - 1].getElementsByTagName("td")[0].textContent) {
更改为 if ( i > 2)
它将执行 if-case。所以它必须是 .textContent
或 .getElementsByTagName
的问题,但我不知道为什么,我不知道如何更改它,因为没有错误并且它正在与 Firefox 一起工作。
我也包括了console.log(rows)
。
JavaScript:
function test_internet_explorer() {
// Variables
var table, checkBox, filterCheckBox, filterDropDown, rows, cells, secret, modelRange, dropdown, rowCount;
dropdown = document.getElementById('modelRangeDropdown');
table = document.getElementById('myTable');
rowCount = table.rows.length;
checkBox=document.getElementById('identicalSecrets');
rows = table.getElementsByTagName("tr");
console.log(rows)
filterCheckBox = checkBox.checked;
filterDropDown = dropdown.value;
var index = 0;
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
cells = row.getElementsByTagName("td");
modelRange = cells[0] || null;
secret = cells[3];
// does not execute
if (i > 2 && modelRange.textContent != rows[i - 1].getElementsByTagName("td")[0].textContent) {
rows[i - 1].getElementsByTagName("td")[2].firstChild.nodeValue = "-";
alert('script loaded');
}
// does execute
if (i === rowCount - 1) {
rows[i].getElementsByTagName("td")[2].firstChild.nodeValue = "-";
}
// does not execute
if (i > 2 && modelRange.textContent === rows[i - 1].getElementsByTagName("td")[0].textContent) {
rows[i - 1].getElementsByTagName("td")[2].firstChild.nodeValue = rows[i].getElementsByTagName("td")[1].textContent;
}
}
}
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<html>
<head><title>Secrets</title></head>
<body onload="test_internet_explorer();">
<table id="myTable">
<colgroup>
<col width="150" style="background-color:e2e2e2"></col>
</colgroup>
<tr style ="background-color:a5a5a5">
<th rowspan="2">plane
<select id="modelRangeDropdown" onchange="test_internet_explorer()">
<option selected="selected">All</option>
<xsl:for-each select="logstore/plane">
<option>
<xsl:value-of select="Name" />
</option>
</xsl:for-each>
</select>
</th>
<th colspan="2" width="330">date</th>
<th rowspan="2">Secret
<input type="checkbox" id="identicalSecrets" onchange="test_internet_explorer()"></input>
<label for="identicalSecrets">hide identical secrets</label>
</th>
</tr>
<tr>
<th align="center" style="background-color:a5a5a5">begin</th>
<th align="center" style="background-color:a5a5a5">end</th>
</tr>
<xsl:for-each select="logstore/plane/trigger">
<tr>
<td align="center"><xsl:value-of select="../Name"/></td>
<td align="center"><xsl:value-of select="date"/></td>
<td align="center"><xsl:value-of select="date"/></td>
<td><xsl:value-of select="secret"/></td>
</tr>
</xsl:for-each>
</table>
<script type="text/javascript" src="test_internet_explorer.js"></script>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在我的例子中,如果使用 textContent
.
在 IE11 上出现问题,一种可能的解决方案是使用 innerText
而不是 textContent
我正在使用 xslt 创建一个 html 文件。我有一些 JavaScript 代码来过滤一些表格行。在 Internet Explorer 11 上,我的 JavaScript 的一些特定 if-cases 没有被执行,我不知道为什么,因为我的开发控制台没有错误。 您可以在下面看到一些 JavaScript 代码,其中包含用于已执行和未执行的 if-cases 的命令。
如果我将 if (i > 2 && modelRange.textContent != rows[i - 1].getElementsByTagName("td")[0].textContent) {
更改为 if ( i > 2)
它将执行 if-case。所以它必须是 .textContent
或 .getElementsByTagName
的问题,但我不知道为什么,我不知道如何更改它,因为没有错误并且它正在与 Firefox 一起工作。
我也包括了console.log(rows)
。
JavaScript:
function test_internet_explorer() {
// Variables
var table, checkBox, filterCheckBox, filterDropDown, rows, cells, secret, modelRange, dropdown, rowCount;
dropdown = document.getElementById('modelRangeDropdown');
table = document.getElementById('myTable');
rowCount = table.rows.length;
checkBox=document.getElementById('identicalSecrets');
rows = table.getElementsByTagName("tr");
console.log(rows)
filterCheckBox = checkBox.checked;
filterDropDown = dropdown.value;
var index = 0;
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
cells = row.getElementsByTagName("td");
modelRange = cells[0] || null;
secret = cells[3];
// does not execute
if (i > 2 && modelRange.textContent != rows[i - 1].getElementsByTagName("td")[0].textContent) {
rows[i - 1].getElementsByTagName("td")[2].firstChild.nodeValue = "-";
alert('script loaded');
}
// does execute
if (i === rowCount - 1) {
rows[i].getElementsByTagName("td")[2].firstChild.nodeValue = "-";
}
// does not execute
if (i > 2 && modelRange.textContent === rows[i - 1].getElementsByTagName("td")[0].textContent) {
rows[i - 1].getElementsByTagName("td")[2].firstChild.nodeValue = rows[i].getElementsByTagName("td")[1].textContent;
}
}
}
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<html>
<head><title>Secrets</title></head>
<body onload="test_internet_explorer();">
<table id="myTable">
<colgroup>
<col width="150" style="background-color:e2e2e2"></col>
</colgroup>
<tr style ="background-color:a5a5a5">
<th rowspan="2">plane
<select id="modelRangeDropdown" onchange="test_internet_explorer()">
<option selected="selected">All</option>
<xsl:for-each select="logstore/plane">
<option>
<xsl:value-of select="Name" />
</option>
</xsl:for-each>
</select>
</th>
<th colspan="2" width="330">date</th>
<th rowspan="2">Secret
<input type="checkbox" id="identicalSecrets" onchange="test_internet_explorer()"></input>
<label for="identicalSecrets">hide identical secrets</label>
</th>
</tr>
<tr>
<th align="center" style="background-color:a5a5a5">begin</th>
<th align="center" style="background-color:a5a5a5">end</th>
</tr>
<xsl:for-each select="logstore/plane/trigger">
<tr>
<td align="center"><xsl:value-of select="../Name"/></td>
<td align="center"><xsl:value-of select="date"/></td>
<td align="center"><xsl:value-of select="date"/></td>
<td><xsl:value-of select="secret"/></td>
</tr>
</xsl:for-each>
</table>
<script type="text/javascript" src="test_internet_explorer.js"></script>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在我的例子中,如果使用 textContent
.
innerText
而不是 textContent