Селектор jQuery для захвата ячеек в том же столбце

Учитывая многострочную таблицу с несколькими столбцами, как я могу выбрать все ячейки в том же столбце, что и любая произвольная ячейка (например, ячейка, на которую нажата).

Что-то вроде:

$("td").click(function(){
    var columnNo = $(this).columnNo?
    $(this).closest("table").find("tr td:eq("+columnNo+")").css("color", "red");
});

Мне нужно сделать это, не называя столбцы индивидуально. Например. он должен работать с простой общей разметкой table без дополнительных классов или идентификаторов.

Ответы

Ответ 1

Ваша попытка правильная, все, что вам нужно сделать, это использовать .index, чтобы найти номер столбца - индекс <td> в строке. Вам также необходимо использовать nth-child-selector для соответствия индексам столбцов других элементов <td>.

$("td").click(function(){
    var columnNo = $(this).index();
    $(this).closest("table")
        .find("tr td:nth-child(" + (columnNo+1) + ")")
        .css("color", "red");
});

Ответ 2

Это можно сделать с помощью метода jQuery eq.

var $tds = $("td"); // get all tds beforehand, so jquery doesn't 
                    // need to hit the DOM every click

$("td").on("click", function () {
    var position = $(this).index(),
        $tdsInColumn = $tds.filter(":nth-child(" + index + ")");

    // manipulate $tdsInColumn in any way
    $tdsInColumn.addClass("selected");
});

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

Ссылка

jQuery.eq