#javascript #jquery #html-table #jquery-selectors
#javascript #jquery #html-таблица #jquery-селекторы
Вопрос:
Следующий jQuery выполняется очень медленно (~ 7 секунд). Я явно делаю это неправильно!
Я пытаюсь скопировать содержимое столбца col
в столбец 0
в HTML-таблице, поэтому, если col равно 2, мне нужно скопировать столбец 2 в столбец 0.
for (var i=0;i<31;i )
$('.grid tr:nth-child(' i ') td:first-child').text(
$('.grid tr:nth-child(' i ') td:nth-child(' col ')').text()
);
HTML:
<table>
<tr><td>A</td><td>D</td><td>G</td></tr>
<tr><td>B</td><td>E</td><td>H</td></tr>
<tr><td>C</td><td>F</td><td>I</td></tr>
<!-- etc. -->
</table>
Ответ №1:
Вам не нужно выделять каждую ячейку таблицы по отдельности. Вы можете выбрать исходный столбец и столбцы назначения и перебирать их:
// Get the target column table cells. This will select the first cell from
// each row in the table.
var target = $('.grid tr td:first-child');
// Iterate over each cell in the source column and copy its text to the
// corresponding cell in the target column.
$('.grid tr td:nth-child(' (col 1) ')').each(function (rowIndex) {
target.slice(rowIndex, rowIndex 1).text($(this).text());
});
Комментарии:
1. Упс, источник и цель поменялись местами изначально. Исправлено.
2. Классные компоненты. Это работает, если я меняю
slice
наeq
. Из интереса, почему мой исходный код был таким медленным?3. О, я пропустил 2-й параметр для slice() . Исправлено.
4. Ваш исходный код выбирал каждую исходную и целевую ячейки по отдельности, что означало гораздо больший обход DOM для jQuery.
Ответ №2:
Другой вариант. Не уверен, какой из них будет работать быстрее. Я просто удалил первый столбец, поскольку он должен был быть заменен, а затем добавил выбранный столбец:
col = 2;
$('.grid td:first-child').remove();
$('.grid td:nth-child(' (--col) ')').each(function(){
$(this).parent('tr').prepend('<td>' $(this).text() '</td>');
});
Проверьте это: здесь .