Сопоставление класса и индекса ячейки таблицы с помощью jQuery

#javascript #jquery

#javascript #jquery

Вопрос:

Следующий код — это просто демонстрация теории, которую я хочу применить к своему приложению, поэтому использование THIS вместо td.flex не подходит для второй строки в функции.

Также я ДОЛЖЕН использовать .index вместо n-го дочернего элемента по другим причинам.

Это все сказанное 🙂

Следующая функция перебирает все TD в первой строке таблицы, которые имеют класс flex. Для каждого из них запишите значение индекса. Следующая строка не является частью реального приложения, но для проверки теории необходимо найти все td с классом flex, значение индекса которых соответствует значению cellIndex. Есть идеи, как заставить это работать?

Помните, что этот код предназначен для проверки теории, поэтому я не использую nth-child или this для применения раскраски css!

 cellIndex = new Array();

    $('table tr:first-child td.flex').each(function (i) {

        cellIndex[i] = $(this).index();

        $($('td.flex').index(cellIndex)).css('background-color', '#ff0000');

    });
 

если я сделаю: console.log($('td.flex').index(cellIndex));

Я получаю -1 для каждого цикла

Просто чтобы подтвердить, что я знаю, что могу это сделать:

 $(this).css('background-color', '#ff0000');
 

но это НЕ то, чего я пытаюсь достичь с помощью этой функции, и это НЕ будет работать в реальном приложении.

Пример HTML:

 <table>
<tr>
<td class="flex">Flex</td>
<td>Not Flex</td>
<td class="flex">Flex</td>
<td>Not Flex</td>
<td>Not Flex</td>
</tr>
</table>
 

Комментарии:

1. Можете ли вы также добавить пример HTML?

Ответ №1:

каждая функция уже включает систему индексов. Таким образом, вы можете использовать его следующим образом (cellIndex устарел): http://jsfiddle.net/TMFg3 /

 cellIndex = new Array();

$('table tr:first-child td.flex').each(function (i) {

    cellIndex[i] = i;

   $('td.flex:eq(' i ')').css('background-color', '#ff0000');

});
 

Если вы не хотите использовать cellIndex, то вам придется зацикливать его вне каждой функции, поскольку вы не можете отправить массив в индексный идентификатор, плюс это изменило бы одни и те же цели в каждом цикле 🙂

Вы, конечно, также можете использовать индекс в cellIndex следующим образом:

 cellIndex = new Array();

$('table tr:first-child td.flex').each(function (i) {

    cellIndex[i] = i;

   $('td.flex:eq(' cellIndex[i] ')').css('background-color', '#ff0000');

});
 

Ответ №2:

Если вы просто хотите пройтись по списку, вы могли бы сделать:

 $('table tr td:first-child td.flex').each(function (i) {        
    var cellIndex =$('table tr:first-child td').index(this);
    $('#hello').text($('#hello').text() '"' cellIndex '",');
    $('td').eq(cellIndex).css('background-color', '#ff0000');    
}); 
 

Предполагается, что элемент, идентифицированный с помощью #hello, существует — тогда он будет содержать «0», «2», показывающие индексы, а элементы будут иметь красный фон.

Чтобы поместить это в массив:

 $(document).ready(function(){
  var myCellIndexes=[];
  $('table tr td').parent().find('.flex').css('background-color','green');
  $('table tr:first-child td.flex').each(function (i) {        
    var cellIndex =$('table tr:first-child td').index(this);
    myCellIndexes[i]=cellIndex;
    $('#hello').text($('#hello').text() '"' cellIndex '",');
    $('td').eq(cellIndex).css('background-color', '#ff0000');  
   }); 
   $('#hello').text($('#hello').text() myCellIndexes);
});
 

в результате было бы: «0»,»2″,0,2 в приветствии в конце демонстрируется, что массив теперь содержит индексы элементов. Это должно дать вам рабочее представление о том, что вы хотите сделать, чтобы ваша реальная работа была выполнена 🙂