Для цикла, если оператор распознает ==, но не <в Javascript
Я пытаюсь создать скрипт, который заменит определенные значения в моей таблице другими значениями. Я сгенерировал таблицу в HTML, которая отлично работает. Я хочу заменить элементы в 4-м столбце в каждой из первых 3 строк значением 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[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"';
}
}
Почему == работает, а <нет? Существуют ли простые способы распечатать выходные данные цикла for, чтобы я мог легче их отлаживать - я новичок в кодировании. Спасибо!
Изменить: вот 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;
}
3 ответа
Вы используете свой скрипт для ВСЕХ <tr>
теги, как сказал @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"';
}
}
Для первых трех итераций вашего цикла (i < 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"';
}
}
Хорошо, теперь, когда вы разместили свой HTML, ошибка видна:) Первый tr
вы найдете не содержит td
Так что вы получите необработанную ошибку, и функция не работает.
Вам нужно только искать строки в tbody
исключая все, что может быть в theader
или же tfooter
, Также, как правило, рекомендуется выполнять итерацию только по строкам определенной таблицы, а не по всем строкам во всем документе. Вы могли бы даже дать конкретный tbody
идентификатор и доступ к нему напрямую, избегая всех этих проблем.