Как я могу получить строку на основе значений столбца с помощью jQuery DataTables?

Есть ли способ поиска строки в jQuery DataTables на основе значений столбца? Например, могу ли я определить, какая строка содержит значение «foo» в столбце 1 и значение «bar» в столбце 2? Я хотел бы программно определить, какая строка содержит эти значения. Является ли лучшим решением просто сохранить отдельную структуру данных, которая связывает значения и индексы строк вместе? Я хочу удалить строку таблицы со столбцами, содержащими заданные значения.

Я использую DataTables 1.8.0 и jQuery 1.5.1.


person Scott    schedule 22.06.2011    source источник


Ответы (3)


Я бы получил данные с помощью fnGetData, перебрал строки и использовал $.inArray:

function getRow(table_id, arg1, arg2) {
    var oTable = $('#' + table_id).dataTable(),
        data = oTable.fnGetData(),
        row, i, l = data.length;

    for ( i = 0; i < l; i++ ) {
        row = data[i];

        // columns to search are hard-coded, but you could easily pass this in as well
        if ( $.inArray(arg1, row) == 0 && $.inArray(arg2, row) == 1 ) {
            return $('#' + table_id + ' tr').eq(i);
        }
    }
    return false;
}

$row = getRow('table_id', 'foo', 'bar');

ПРИМЕЧАНИЕ. Непроверенный

person glortho    schedule 22.06.2011

Попробуйте использовать этот селектор:

$("tr td:nth-child(2):contains('value')").siblings(":contains('test')")

Взгляните на эту скрипку:

http://jsfiddle.net/B4wMp/8/

DataTable просто отображается как обычная старая html-таблица.

person Abe Miessler    schedule 22.06.2011
comment
Красиво и лаконично, хотя contains будет возвращать true для частичных значений, когда вы этого не хотите — возвращает true для new york, когда вы запросили new. Чтобы настроить таргетинг на конкретный столбец, вам также нужно будет добавить ...siblings.eq(column_n)..., убедившись, что вы выбрали правильный из массива на основе новых индексов, полученных в результате исключения первоначально выбранного элемента. - person glortho; 23.06.2011

У меня было подобное требование. Я также использую Datatable, но с версией >= 1.10. fnGetData() теперь отсутствует.

Вот адаптация ответа @glortho:

function getRow(tableId, propName, propValue) {
        var oTable = $('#' + tableId).DataTable(),
            data = oTable.rows().data(),
            row, i, l = data.length;

        for ( i = 0; i < l; i++ ) {
            row = data[i];


            if (row[propName] == propValue) {

                return $(`#${tableId}  tr`).eq(i+1);
            }
        }


        return false;
    }
person user3214451    schedule 13.05.2018