循环遍历列中的所有单元格,并使用唯一项目填充下拉列表

时间:2014-09-12 09:03:42

标签: jquery unique

我有一个过滤表格的下拉列表。我希望下拉列表在每次过滤表时重新填充,以仅显示剩余的(唯一)项。目前我有以下功能

    function rePopulateSelectList(column, control) {
//wipe the previous drop down
    $('#' + control).find('option').remove();
//
    $('#adminTable tr').each(function () {
         $.unique($(this).find('td:eq(' + column + ')')).each(function () {
            var columnText = $(this).text();
            $('#' + control).append('<option value="' + columnText + '">' + columnText + '</option>');
        });
    });
}

正在重新填充下拉列表(在select.change()事件中)但我最终得到的下拉选项至少两倍,其中没有一个是唯一的

2 个答案:

答案 0 :(得分:1)

尝试以下代码。 $ .unique不会通过比较td。

中的文本给你独特的tr
function rePopulateSelectList(column, control) {

    var $control = $('#' + control);

    //wipe the previous drop down
    $control.find('option').remove();

    $('#adminTable tr').each(function () {

        var columnText = $(this).find('td:eq(' + column + ')').text();

        if ($control.find("option[value='" + columnText + "']").length > 0) {
            return;
        }

        $control.append('<option value="' + columnText + '">' + columnText + '</option>');

    });
}

答案 1 :(得分:1)

您的代码似乎可能有一些问题。传入列索引假设您只需要一列的值?尝试这样的事情:

function rePopulateSelectList(columnIndex, select) {
    $('#' + select + ' option').remove();

    var control = $('#' + select), values = [];
    $('#adminTable tr').each(function () {
        var cell = $(this).find('td:eq(' + columnIndex + ')'),
            text = cell.text();

        if (values.indexOf(text) == -1) {
            values.push(text);
            control.append('<option value="' + text + '">' + text + '</option>');
        }
    });
}