#javascript #html #jquery
#javascript #HTML #jquery
Вопрос:
У меня есть таблица, которая включает 50 идентичных
<tr>
<td>#</td>
<td>#</td>
<td>123123</td>
</tr>
...
и теперь я могу получить значение конкретной строки следующим образом
$("#tableId tbody tr").each(function(){
var a = $(this).children();
var arr =a[2].innerText; //get each row
a[2].innerText = statename // get the third cell in each row
});
В данном случае statename
это объект с 50 названиями состояний. Все, что я хочу сделать сейчас, это заменить это 123123
на каждое имя состояния внутри объекта. Чтобы это выглядело следующим образом:
<tr>
<td>#</td>
<td>#</td>
<td>Alabama</td>
</tr>
<tr>
<td>#</td>
<td>#</td>
<td>Alaska</td>
</tr>
<tr>
<td>#</td>
<td>#</td>
<td>Arizona</td>
</tr>
...
Я попытался выполнить цикл внутри jQuery, но это не сработало. Пожалуйста, помогите, большое вам спасибо.
Комментарии:
1. Как выглядят данные с 50 состояниями? Какова структура, массив или объект или и то, и другое? Итак, существует ли столько строк, сколько состояний в ваших данных? Соответствует ли число в таблице ключу в данных?
Ответ №1:
Вы можете попробовать использовать each
метод с find
методом, в названии селектора вы можете выполнить поиск по последнему <td>
элементу td:last
. Вот так:
var statenames = ['Alabama', 'Alaska', 'Arizona'];
$("#tableId tbody tr").each(function(index){
$(this).find('td:last').text(statenames[index]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="tableId">
<tbody>
<tr>
<td>#</td>
<td>#</td>
<td>123123</td>
</tr>
<tr>
<td>#</td>
<td>#</td>
<td>123123</td>
</tr>
<tr>
<td>#</td>
<td>#</td>
<td>123123</td>
</tr>
</tbody>
</table>
Ответ №2:
Используя vanilla js, вы можете легко получить последние элементы td в tr, выполнить цикл по ним и присвоить новые значения узлам
const stateNames = ['Alabama', 'Alaska', 'Arizona'];
document.querySelectorAll('tr td:last-child')
.forEach((x, i) => x.textContent = stateNames[i])
<table>
<tr>
<td>#</td>
<td>#</td>
<td>123123</td>
</tr>
<tr>
<td>#</td>
<td>#</td>
<td>123123</td>
</tr>
<tr>
<td>#</td>
<td>#</td>
<td>123123</td>
</tr>
</table>
Комментарии:
1. Большое вам спасибо!!! Я работал над этим несколько дней, и это прекрасно решило мою проблему!!! Не могли бы вы подробнее рассказать об использовании функции arrow в этом случае? Я полагаю, что это JS вместо jQuery.
2. Это просто способ определения функции, но способом ES6 вместо function(){} мы делаем ()=>
Ответ №3:
Убедитесь, что ваша переменная statename
является массивом, и не забудьте индекс состояния
// find elements
statename = ["Alabama", "Alaska", "Arizona"]
$("#tableId tbody tr").each(function(index){
var a = $(this).children();
var arr =a[2].innerText; //get each row
a[2].innerText = statename[index] // get the third cell in each row
});