【问题标题】:For loop if statement recognizes == but not < in JavascriptFor 循环 if 语句在 Javascript 中识别 == 但不是 <
【发布时间】:2016-10-19 13:19:49
【问题描述】:

我正在尝试创建一个脚本,将表中的某些值替换为其他值。我在 HTML 中生成了一个可以正常工作的表格。我想用值 1/8" 替换前 3 行中每一行中第 4 列中的元素。

var rows = document.getElementsByTagName('tr');

for (var i = 0; i < rows.length; i++) {
 var cells = rows[i].getElementsByTagName('td');
 if (i < 3) {
  cells[3].innerHTML = '1/8"';
 }
}

使用上面的代码对我的表格没有任何作用,但是使用下面的代码用我的值替换第 4 个元素

var rows = document.getElementsByTagName('tr');

for (var i = 0; i < rows.length; i++) {
 var cells = rows[i].getElementsByTagName('td');
 if (i == 3) {
 cells[3].innerHTML = '1/8"';
 }
}

为什么 == 有效,而

编辑:这是我正在使用的 HTML 以及 CSS(这可能不是必需的)

HTML5:

<div class="eo_product_listing_table">
<table class="tableizer-table">
<thead>
  <tr class="tableizer-firstrow">

    <th>Item #</th>
    <th>Type</th>
    <th>Operting Temp.</th>
    <th>O.D.</th>
    <th>Length</th>
    <th>Material</th>
    <th>Junction</th>
    <th>Price</th>
    <th>Order</th>
  </tr>
</thead>

<tbody>
  <!--1/8-->
  <!--6-->
  <tr>
    <td>NB4-CAXL-14U-12-AAG</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>3/8"</td>
    <td>6"</td>
    <td>316SS</td>
    <td>Grounded</td>
    <td>$51.00</td>
    <td><a href="/">Order</a></td>
  </tr>
  <tr>
    <td>NB4-CAXL-14U-12-AAU</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>3/8"</td>
    <td>6"</td>
    <td>316SS</td>
    <td>Ungrounded</td>
    <td>$53.00</td>
    <td><a href="/">Order</a></td>
  </tr>
  <tr>
    <td>NB4-CAXL-14U-12-AAE</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>3/8"</td>
    <td>6"</td>
    <td>316SS</td>
    <td>Exposed</td>
    <td>$51.00</td>
    <td><a href="/">Order</a></td>
  </tr>
  <!--12-->
  <tr>
    <td>NB4-CAXL-14U-12-ABG</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>3/8"</td>
    <td>12"</td>
    <td>316SS</td>
    <td>Grounded</td>
    <td>$53.00</td>
    <td><a href="/">Order</a></td>
  </tr>
  <tr>
    <td>NB4-CAXL-14U-12-ABU</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>3/8"</td>
    <td>12"</td>
    <td>316SS</td>
    <td>Ungrounded</td>
    <td>$55.00</td>
    <td><a href="/">Order</a></td>
  </tr>
  <tr>
    <td>NB4-CAXL-14U-12-ABE</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>3/8"</td>
    <td>12"</td>
    <td>316SS</td>
    <td>Exposed</td>
    <td>$53.00</td>
    <td><a href="/">Order</a></td>
  </tr>
  <!--18-->
  <tr>
    <td>NB4-CAXL-14U-12-ACG</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>1/8"</td>
    <td>18"</td>
    <td>316SS</td>
    <td>Grounded</td>
    <td>$57.00</td>
    <td><a href="/">Order</a></td>
  </tr>
  <tr>
    <td>NB4-CAXL-14U-12-ACU</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>1/8"</td>
    <td>18"</td>
    <td>316SS</td>
    <td>Ungrounded</td>
    <td>$59.00</td>
    <td><a href="/">Order</a></td>
  </tr>
  <tr>
    <td>NB4-CAXL-14U-12-ACE</td>
    <td>K</td>
    <td>-270°C to 1372°C</br>–454°F to 2501°F</td>
    <td>1/8"</td>
    <td>18"</td>
    <td>316SS</td>
    <td>Exposed</td>
    <td>$57.00</td>
    <td><a href="/">Order</a></td>
  </tr>
</tbody>

CSS3

.eo_product_listing_table {}

.tableizer-table tr:nth-child(even) {
   background-color: #eee;
}

table.tableizer-table {
  font-size: 12px;
  border: 1px solid #CCC;
  font-family: Arial, Helvetica, sans-serif;
  color: black;
}

.tableizer-table td {
  padding: 4px;
  margin: 3px;
  border: 0px solid #CCC;
  text-align: left;
  color: black;
}

.tableizer-table th {
  background-color: #104E8B;
  color: #FFF;
  font-weight: bold;
  text-align: left;
}

.tableizer-firstrow {
  background-color: #000;
  color: whtie;
}

【问题讨论】:

  • console.log 是为您的脚本打印调试信息的最佳选择。控制台也是您可以找到代码引发的任何未处理错误的地方。
  • 你确定每一行至少有四个tds吗?你有任何错误吗?您是否尝试过使用调试器?
  • @Luaan 我相信每行有 9 个 td,除非代码没有按照我认为的方式提取它们
  • 好吧,您将浏览文档中的所有trs。会不会是您正在阅读一个完全不同的表格?
  • @Luaan 不,我不这么认为。当我说如果 i == 3 时它起作用。当我切换到不等式时它不起作用,即 i

标签: javascript if-statement for-loop html-table inequality


【解决方案1】:

您将脚本用于所有&lt;tr&gt; 标签,就像@Luaan 所说的那样 - 查看您的 HTML 文件。也就是说,您必须计算表格 1,而不是表格 0。然后一切正常。

var rows = document.getElementsByTagName('tr');

for (var i = 1; i < rows.length; i++) {
 var cells = rows[i].getElementsByTagName('td');
 if (i < 4) {
 cells[3].innerHTML = '1/8"';
 }
}

【讨论】:

  • Ofc,我接受了你的回答,但它说我需要 15 个代表才能看到我的支持。不过谢谢,我非常感谢您的帮助
  • @MatthewSirkin 现在可以了 :)
【解决方案2】:

对于循环的前三个迭代 (i &lt; 3),您只是一次又一次地将同一单元格的 innerHTML 设置为 '1/8"'。

也许你打算这样做:

var rows = document.getElementsByTagName('tr');

for (var i = 0; i < rows.length; i++) {
  var cells = rows[i].getElementsByTagName('td');
  if (i < 3) {
    cells[i].innerHTML = '1/8"';
  }
}

【讨论】:

  • 通过将其设置为 cells[i],它正在更改要更改的行中的 td。我总是想改变每一行的第四个元素。因此,为什么我认为它会是细胞[3]。但我想在一堆不同的行中更改第四个元素。我的想法是,它将通过 for 循环检查 if 语句,并且对于 i
  • @MatthewSirkin 您希望前三行的第四个单元格中都包含1/8"?
  • 是的,前 3 行中的每一行都将其 3/8" 值替换为 1/8",这是正确的。我实际上想用一堆嵌套的 for 循环来做到这一点,但如果我能让它工作,我很确定我可以自己做剩下的。
【解决方案3】:

好的,既然您已经发布了您的 HTML,那么错误就显而易见了 :) 您发现的第一个 tr 不包含任何 tds,因此您会收到一个未处理的错误并且函数会中断。

您只需在tbody 中查找行,不包括可能在theader 或tfooter 中的任何行。仅遍历特定表的行而不是整个文档中的所有行通常也是一个好主意。您甚至可以为特定的 tbody 提供一个 id 并直接访问它,从而避免所有这些问题。

【讨论】:

  • 这是有道理的,所以在我的 HTML 中我会说:
  • 然后我会使用 getElementsById?
  • @MatthewSirkin 有几种不同的方法可以做到这一点。如果您不需要支持旧浏览器,document.querySelectorAll("#tableBody tr") 可能效果最好。如果你不能这样做,document.getElementsById("tableBody").getElementsByTagName("tr") 可以正常工作。
猜你喜欢
相关资源
最近更新 更多
热门标签