tôi muốn sắp xếp các mục thả xuống bằng javascript, bất kỳ ai cũng có thể cho tôi biết cách thực hiện việc này.Sắp xếp danh sách thả xuống bằng cách sử dụng Javascript
Trả lời
Đặt giá trị tùy chọn và văn bản vào một mảng, sắp xếp mảng, sau đó thay thế các phần tử tùy chọn hiện có bằng các phần tử mới được tạo từ mảng được sắp xếp.
đây là một liên kết tôi tìm thấy trong đó cho thấy làm thế nào để làm điều này: http://www.w3schools.com/jsref/jsref_sort.asp – mrTomahawk
Bạn có thể sử dụng jQuery và một cái gì đó như thế này:
$("#id").html($("#id option").sort(function (a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
Nhưng nó có thể tốt hơn để hỏi tại sao và những gì bạn đang cố gắng để đạt được.
+1 hoàn toàn dựa trên những gì nó sẽ làm mà không cần jQuery (xem câu trả lời dưới đây) . –
Điều này làm việc tuyệt vời cho tôi. Trình đơn thả xuống của tôi được điền khi thay đổi một trình đơn thả xuống khác. Mã này đã làm các trick! Cảm ơn @mastro – shanabus
hoạt động như một giấc mơ ... ngắn gọn ... cảm ơn! –
<select id="foo" size="10">
<option value="3">three</option>
<option value="1">one</option>
<option value="0">zero</option>
<option value="2">two</option>
</select>
<script>
// WARN: won't handle OPTGROUPs!
var sel = document.getElementById('foo');
// convert OPTIONs NodeList to an Array
// - keep in mind that we're using the original OPTION objects
var ary = (function(nl) {
var a = [];
for (var i = 0, len = nl.length; i < len; i++)
a.push(nl.item(i));
return a;
})(sel.options);
// sort OPTIONs Array
ary.sort(function(a,b){
// sort by "value"? (numeric comparison)
// NOTE: please remember what ".value" means for OPTION objects
return a.value - b.value;
// or by "label"? (lexicographic comparison) - case sensitive
//return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
// or by "label"? (lexicographic comparison) - case insensitive
//var aText = a.text.toLowerCase();
//var bText = b.text.toLowerCase();
//return aText < bText ? -1 : aText > bText ? 1 : 0;
});
// remove all OPTIONs from SELECT (don't worry, the original
// OPTION objects are still referenced in "ary") ;-)
for (var i = 0, len = ary.length; i < len; i++)
sel.remove(ary[i].index);
// (re)add re-ordered OPTIONs to SELECT
for (var i = 0, len = ary.length; i < len; i++)
sel.add(ary[i], null);
</script>
so sánh giá trị sẽ chỉ hoạt động đối với số học; để phân loại từ vựng, hãy xem phần so sánh trong câu trả lời của masto. – bobince
Xin lỗi, nhưng tôi không hiểu điểm của nhận xét của bạn là gì, vì tôi chắc chắn bạn đã xem MỘT dòng bên dưới so sánh số đó thực hiện chính xác a, đoán cái gì, "so sánh lexicographic" trên tùy chọn '"văn bản" ?! :( – altblue
Sử dụng tốt nhất
phụ thuộc vào jQuery
function SortOptions(id) {
var prePrepend = "#";
if (id.match("^#") == "#") prePrepend = "";
$(prePrepend + id).html($(prePrepend + id + " option").sort(
function (a, b) { return a.text == b.text ? 0 : a.text < b.text ? -1 : 1 })
);
}
Ví dụ:
< chọn id = "my-list-id"> được sắp xếp với:
SortOptions("#my-list-id");
HOẶC
SortOptions("my-list-id");
Nếu bạn muốn sắp xếp các mục dựa trên _value_ thay vì văn bản thì hàm sẽ đọc: 'function (a, b) {return a.value - b.value})' –
Bạn có thể thử chức năng sắp xếp JQuery cho công tác này -
HTML MÃ -
<select id="ddlList">
<option value="3">Three</option>
<option value="1">One</option>
<option value="1">one</option>
<option value="1">a</option>
<option value="1">b</option>
<option value="1">A</option>
<option value="1">B</option>
<option value="0">Zero</option>
<option value="2">Two</option>
<option value="8">Eight</option>
</select>
jQuery MÃ -
$("#ddlList").html($('#ddlList option').sort(function(x, y) {
return $(x).text().toUpperCase() < $(y).text().toUpperCase() ? -1 : 1;
}));
$("#ddlList").get(0).selectedIndex = 0;
e.preventDefault();
HOẶC
bạn cũng có thể sử dụng mảng sắp xếp cho điều này -
var options = $('#ddlList option');
var arr = options.map(function (_, o) { return { t: $(o).text(), v: o.value }; }).get();
arr.sort(function (o1, o2) { return o1.t.toUpperCase() > o2.t.toUpperCase() ? 1 : o1.t.toUpperCase() < o2.t.toUpperCase() ? -1 : 0; });
options.each(function (i, o) {
o.value = arr[i].v;
$(o).text(arr[i].t);
});
Ý anh là gì bằng cách thả xuống mục? – Gumbo
Bạn nhận được dữ liệu mà bạn đang điền danh sách thả xuống bằng cách nào? – NoahD