我有一个过滤表格的下拉列表。我希望下拉列表在每次过滤表时重新填充,以仅显示剩余的(唯一)项。目前我有以下功能
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()事件中)但我最终得到的下拉选项至少两倍,其中没有一个是唯一的
答案 0 :(得分:1)
尝试以下代码。 $ .unique不会通过比较td。
中的文本给你独特的trfunction 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>');
}
});
}