jQuery를 사용하여 알파벳순으로 옵션 요소 정렬
option
요소 내에서 select
요소를 알파벳순으로 정렬하는 것을 이해하려고합니다 . 이상적으로는 사용자가 일부 버튼을 클릭 할 때 정렬해야하기 때문에 select 요소를 전달할 수있는 별도의 함수로 사용하고 싶습니다.
나는 이것을하는 좋은 방법을 찾기 위해 높고 낮은 것을 검색했지만 나를 위해 일하는 것을 찾을 수 없었습니다.
옵션 요소는 값이 아닌 텍스트를 기준으로 알파벳순으로 정렬해야합니다.
어떤 식 으로든 가능합니까?
내가 할 일은 :
- 각각의 텍스트와 값
<option>
을 개체 배열로 추출 합니다. - 배열을 정렬하십시오.
<option>
순서대로 배열 내용으로 요소를 업데이트하십시오 .
jQuery로이를 수행하려면 다음과 같이 할 수 있습니다.
var options = $('select.whatever option');
var arr = options.map(function(_, o) { return { t: $(o).text(), v: o.value }; }).get();
arr.sort(function(o1, o2) { return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; });
options.each(function(i, o) {
o.value = arr[i].v;
$(o).text(arr[i].t);
});
편집 — 알파벳 대소 문자를 무시하도록 정렬하려면 비교하기 전에 JavaScript .toUpperCase()
또는 .toLowerCase()
함수를 사용할 수 있습니다 .
arr.sort(function(o1, o2) {
var t1 = o1.t.toLowerCase(), t2 = o2.t.toLowerCase();
return t1 > t2 ? 1 : t1 < t2 ? -1 : 0;
});
때로는 옵션 클래스와 다른 인수 (예 : data-foo)를 유지하기를 원하기 때문에 허용되는 답변이 모든 경우에 가장 좋은 것은 아닙니다.
내 솔루션은 다음과 같습니다.
var sel = $('#select_id');
var selected = sel.val(); // cache selected value, before reordering
var opts_list = sel.find('option');
opts_list.sort(function(a, b) { return $(a).text() > $(b).text() ? 1 : -1; });
sel.html('').append(opts_list);
sel.val(selected); // set cached selected value
// ie11 또는 빈 옵션이있는 경우 html ( '') empty ()
<select id="mSelect" >
<option value="val1" > DEF </option>
<option value="val4" > GRT </option>
<option value="val2" > ABC </option>
<option value="val3" > OPL </option>
<option value="val5" > AWS </option>
<option value="val9" > BTY </option>
</select>
.
$("#mSelect").append($("#mSelect option").remove().sort(function(a, b) {
var at = $(a).text(), bt = $(b).text();
return (at > bt)?1:((at < bt)?-1:0);
}));
html :
<select id="list">
<option value="op3">option 3</option>
<option value="op1">option 1</option>
<option value="op2">option 2</option>
</select>
jQuery :
var options = $("#list option"); // Collect options
options.detach().sort(function(a,b) { // Detach from select, then Sort
var at = $(a).text();
var bt = $(b).text();
return (at > bt)?1:((at < bt)?-1:0); // Tell the sort function how to order
});
options.appendTo("#list"); // Re-attach to select
환상적으로 작동하는 tracevipin의 솔루션을 사용했습니다. 쉽게 읽을 수있는 코드를 찾고 이해 한 후에 압축하는 것을 좋아하는 저와 같은 사람을 위해 여기에 약간 수정 된 버전을 제공합니다 . 또한 옵션 DOM 요소에 대한 바인딩을 유지 하는 .detach
대신 사용 했습니다 .remove
.
Pointy 솔루션의 개선 된 버전은 다음과 같습니다 .
function sortSelectOptions(selector, skip_first) {
var options = (skip_first) ? $(selector + ' option:not(:first)') : $(selector + ' option');
var arr = options.map(function(_, o) { return { t: $(o).text(), v: o.value, s: $(o).prop('selected') }; }).get();
arr.sort(function(o1, o2) {
var t1 = o1.t.toLowerCase(), t2 = o2.t.toLowerCase();
return t1 > t2 ? 1 : t1 < t2 ? -1 : 0;
});
options.each(function(i, o) {
o.value = arr[i].v;
$(o).text(arr[i].t);
if (arr[i].s) {
$(o).attr('selected', 'selected').prop('selected', true);
} else {
$(o).removeAttr('selected');
$(o).prop('selected', false);
}
});
}
The function has the skip_first
parameter, which is useful when you want to keep the first option on top, e.g. when it's "choose below:".
It also keeps track of the previously selected option.
Example usage:
jQuery(document).ready(function($) {
sortSelectOptions('#select-id', true);
});
I know this topic is old but I think my answer can be useful for a lot of people.
Here is jQuery plugin made from Pointy's answer using ES6:
/**
* Sort values alphabetically in select
* source: http://stackoverflow.com/questions/12073270/sorting-options-elements-alphabetically-using-jquery
*/
$.fn.extend({
sortSelect() {
let options = this.find("option"),
arr = options.map(function(_, o) { return { t: $(o).text(), v: o.value }; }).get();
arr.sort((o1, o2) => { // sort select
let t1 = o1.t.toLowerCase(),
t2 = o2.t.toLowerCase();
return t1 > t2 ? 1 : t1 < t2 ? -1 : 0;
});
options.each((i, o) => {
o.value = arr[i].v;
$(o).text(arr[i].t);
});
}
});
Use is very easy
$("select").sortSelect();
Yes you can sort the options by its text and append it back to the select box.
function NASort(a, b) {
if (a.innerHTML == 'NA') {
return 1;
}
else if (b.innerHTML == 'NA') {
return -1;
}
return (a.innerHTML > b.innerHTML) ? 1 : -1;
};
Fiddle: https://jsfiddle.net/vaishali_ravisankar/5zfohf6v/
The jquery.selectboxes.js plugin has a sort method. You can implement the plugin, or dive into the code to see a way to sort the options.
None of the answers worked for me. For some strange reason, when looping through the options, each option returns nothing when text()
is called. Instead, I was forced to retrieve the option's label via attr('label')
/**
* Sort the options of the target select list
* alphabetically by label. For some reason, when
* we call detach(), the returned options have no
* text() and instead we're forced to get the option's
* label via the 'label' attribute.
* @param select jQuery selector
*/
function sort_multi_select(select) {
var options = select.find('option');
options.detach().sort(function (a, b) {
var at = $(a).attr('label'), //label, not text()
bt = $(b).attr('label');
return at > bt ? 1 : at < bt ? -1 : 0;
});
options.appendTo(select);
}
//example
sort_multi_select($('#my_select'));
This will give you an option to rearrange them manually if you need it
How would you dynamically order an <option select> list using JQuery?
Malakgeorge answer is nice an can be easily wrapped into a jQuery function:
$.fn.sortSelectByText = function(){
this.each(function(){
var selected = $(this).val();
var opts_list = $(this).find('option');
opts_list.sort(function(a, b) { return $(a).text() > $(b).text() ? 1 : -1; });
$(this).html('').append(opts_list);
$(this).val(selected);
})
return this;
}
참고URL : https://stackoverflow.com/questions/12073270/sorting-options-elements-alphabetically-using-jquery
'code' 카테고리의 다른 글
Android Edittext에서 프로그래밍 방식으로 drawableRight를 설정하는 방법은 무엇입니까? (0) | 2020.11.06 |
---|---|
아무것도하지 않는 HTML 링크 만들기 (말 그대로 아무것도하지 않음) (0) | 2020.11.06 |
빈 C # 이벤트 처리기를 자동으로 만들기 (0) | 2020.11.06 |
UIPopoverController는 pushViewController에서 최대 높이로 자동 크기 조정 (0) | 2020.11.06 |
"읽기"에 대한 파이프 입력이 "읽는 동안 ..."구성에 공급 될 때만 작동하는 이유는 무엇입니까? (0) | 2020.11.05 |