Ich möchte die Dropdown-Elemente mit Javascript, kann mir jemand sagen, wie dies zu tun.Sortierung Dropdown-Liste mit Javascript
Antwort
Setzen Sie die Optionswerte und den Text in ein Array, sortieren Sie das Array und ersetzen Sie die vorhandenen Optionselemente durch neue Elemente, die aus dem sortierten Array erstellt wurden.
Hier ist ein Link, den ich gefunden habe, der zeigt, wie man das macht: http://www.w3schools.com/jsref/jsref_sort.asp – mrTomahawk
Sie könnten jQuery und so etwas wie folgt verwenden:
$("#id").html($("#id option").sort(function (a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
Aber es ist wahrscheinlich besser zu fragen, warum und was Sie erreichen wollen.
+1 basierend rein auf was es ohne jQuery gehen würde (siehe Antwort unten) . –
Das hat super für mich funktioniert. Mein Drop-down wird bei Änderung eines anderen Dropdown-Menüs ausgefüllt. Dieser Code hat es geschafft! Danke @mastro – shanabus
funktioniert wie ein Traum ... prägnant ... danke! –
<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>
.Wertvergleich wird nur für numerische Werte funktionieren; zur lexikographischen Sortierung siehe den Komparator in mastos Antwort. – bobince
Entschuldigung, aber ich verstehe nicht, was der Punkt Ihres Kommentars ist, wie Sie sicher eine Zeile unter diesem numerischen Vergleich, der genau ein, rate was "lexikographischer Vergleich" auf Optionen "Text" ?! :( – altblue
Nice Verwendung von
HÄNGT 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 })
);
}
Beispiele:
< select id = "my-list-id"> mit sortiert wird:
SortOptions("#my-list-id");
OR
SortOptions("my-list-id");
Wenn Sie die Elemente auf der Grundlage des _value_ anstatt des Textes sortieren möchten, würde die Funktion lauten: 'function (a, b) {return a.value - b.value})' –
können Sie versuchen, JQuery Sortierfunktion für diese Arbeit -
HTML CODE -
<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 CODE -
$("#ddlList").html($('#ddlList option').sort(function(x, y) {
return $(x).text().toUpperCase() < $(y).text().toUpperCase() ? -1 : 1;
}));
$("#ddlList").get(0).selectedIndex = 0;
e.preventDefault();
OR
Sie können auch Array Sortierung für diesen Einsatz -
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);
});
Was meinst du mit Drop-Down-Artikel? – Gumbo
Wie erhalten Sie die Daten, mit denen Sie die Dropdown-Liste füllen? – NoahD