2012-02-24 2 views
2

Я видел определенные вопросы, которые сбивают вокруг, похожие, но не совсем то же самое, и я в тупике с этим.jQuery выбрать несколько столбцов таблицы по индексу

То, что я пытаюсь сделать, это создать виджет, который принимает таблицу, затем проходит через элементы td таблицы и устанавливает для них курсор: указатель (на данный момент), но только те, которые я разрешаю.

Это как мой код выглядит:

selectableGrid: function (options) { 
      var indexes = options.columns // this is [1,2]; 

      return this.each(function() { 
       // Make the td's in the grid selectable 
       $(this).find("tbody td").attr("style", "cursor:pointer"); 
      }); 
     } 

В конечном итоге я хотел достичь?

<tbody> 
    <td>hello</td> // index 0 
    <td style="cursor:pointer">hello</td> //index 1 
    <td style="cursor:pointer">hello</td> // index 2 
</tbody> 

Имейте в виду, что я мог бы посылать через 1,3 в моем списке массива столбцов, так и л GT не работает для моего сценария (насколько я пытался так или иначе).

EDIT: Для того, чтобы достичь этого я пошел на следующий код:

$(this).find("tr").each(function() { 
     $(this).find("td").each(function (i, el) { 
       if (indexes.indexOf(i) > -1) { 
        $(this).css("cursor", "pointer"); 
       }; 
     }); 
}); 

По какой-то причине «TBODY тд» не будет работать для сингулярного цикла, как это только ссылка на первой итерации тег.

Еще раз повторите попытку переполнения стека.

+1

Вместо '.attr ("стиль", "курсор: указатель");' вы должны используйте '.css (« курсор »,« указатель »);' - используя '.attr' будет перезаписывать любые существующие встроенные стили. – Blazemonger

+0

Спасибо за этот маленький совет - изменил мой код, чтобы использовать его! –

ответ

1

.each принимает index параметр можно ссылаться в коде .....:

var indexes = options.columns; 
this.find("tbody td").each(function(i, el) { 
    if ($.inArray(i,indexes)>-1) { // good idea, ggreiner 
     $(this).css("cursor","pointer"); 
    }; 
}); 
+0

Пришлось немного изменить, но спасибо, сработало угощение. –

+0

, но это будет работать только в том случае, если в таблице есть одна строка. И я верю, что порядок параметров для ['inArray'] (http://api.jquery.com/jQuery.inArray/) обратный – ggreiner

+0

@ggreiner, так что, спасибо еще раз. – Blazemonger

1

проведите через свои индексы и используйте http://api.jquery.com/eq/, чтобы найти конкретную модель.

+0

Я пробовал этот подход и не мог заставить его работать с: $ (this) .find («tbody td»). Eq (value) .css («style», «cursor: pointer»); где значение = индекс (1,2). –

2

Пройдите через элементы td и проверьте, что их индекс относительно их братьев и сестер является индексом, содержащимся в массиве options.columns.

selectableGrid: function (options) { 
    var indexes = options.columns // this is [1,2]; 
    return this.each(function() { 
     $(this).find("tbody td").each(function(){ 
      var columnIndex = $(this).index(); 
      if($.inArray(columnIndex, options.columns) != -1){ 
       $(this).css("cursor", "pointer"); 
      } 
     }); 
    }); 
} 
+0

+1 для inArray! –

Смежные вопросы