Schleife durch
-
04-07-2019 - |
Frage
Ich frage mich, ob jemand die beste Art und Weise des Looping durch all <option>
s in einem <select>
Elemente mit jQuery, und dem Aufbau ein Array vorschlagen könnte.
Eg.
Statt der folgenden, nach dem eine Zeichenfolge ins zum autoCompleteArray () übergeben,
$("#CityLocal").autocompleteArray(
[
"Aberdeen", "Ada", "Adamsville", "Zoar" //and a million other cities...
],
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
... Ich muss durch alle <options>
in einem <select>
Schleife und schieben sie in ein Array, und übergeben, genau das Array-Variablen auf die Funktion, anstatt einer langen Reihe.
Zum Beispiel,
$("#CityLocal").autocompleteArray(
[
MyBigArrayOfOptions
],
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
würde ich Ihnen dankbar, wenn Sie könnte vorschlagen, wie Sachen in ein Array in das richtige Format zu drücken. Ich habe sussed ziemlich das Looping Teil aus einem anderen Beitrag auf dieser Seite.
Danke.
Lösung
Dies sollte funktionieren:
$(document).ready(function(){
// array of option elements' values
var optionValues = [];
// array of option elements' text
var optionTexts = [];
// iterate through all option elements
$('#sel > option').each(function() {
// get value/text and push it into respective array
optionValues.push($(this).val());
optionTexts.push($(this).text());
});
// test with alert
alert(optionValues);
alert(optionTexts);
});
Da Ihr select
Element ID sel .
Andere Tipps
Die jQuery.map Funktion könnte das sein, was Sie suchen . Der folgende Code wird ein Array erstellen, die alle Werte oder Textwerte für die <select>
Optionen enthält.
var values = jQuery.map(jQuery("#select")[0].options, function(option)
{
return option.value;
});
var texts = jQuery.map(jQuery("#select")[0].options, function(option)
{
return option.innerHTML;
});
Alles, was Sie tun müssen, ist das Array als ersten Parameter ohne die Klammern übergeben. Klammern schaffen ein neues Array, aber Sie brauchen nicht zu tun, weil Sie bereits ein Array übergeben. Genau das tun:
$("#CityLocal").autocompleteArray(
MyBigArrayOfOptions,
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
Wenn ich Ihre Frage corrently zu verstehen, soll der folgende Code tun, was Sie brauchen:
myFunction($("#my-select option"));
Die Ausgabe der Abfrage ist bereits eine Reihe von Optionen, die Nachkommen der Auswahl sind, so dass Sie sie in ein anderes Array nicht drücken müssen. Alternativ kann, wenn Ihre Auswahl nicht eine ID haben, aber Sie haben das DOM-Element:
myFunction($("option", theSelect));
Anstecken diese Idee wieder in Ihren Code ein:
$("#CityLocal").autocompleteArray(
$("option", theSelect),
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);