Ripeti < seleziona > e crea un array nel formato: "valore1", "valore2", "valore3"
-
04-07-2019 - |
Domanda
Mi chiedo se qualcuno potrebbe suggerire il modo migliore per scorrere in loop tutte le < option >
in un elemento < select >
con jQuery e costruire un array .
Eg.
Invece di quanto segue, per cui una stringa in è passata a autoCompleteArray (),
$("#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
}
);
... Devo passare in rassegna tutte le < opzioni >
in un < seleziona >
e inserirle in un array e passare semplicemente quella variabile di array alla funzione anziché a una stringa lunga.
Per esempio,
$("#CityLocal").autocompleteArray(
[
MyBigArrayOfOptions
],
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
Le sarei grato se potessi suggerire come inserire elementi in un array nel formato corretto. Ho praticamente sostituito la parte del looping da un altro post su questo sito.
Grazie.
Soluzione
Questo dovrebbe funzionare:
$(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);
});
Dato che l'elemento select
ha ID sel .
Altri suggerimenti
La funzione jQuery.map potrebbe essere ciò che stai cercando . Il codice seguente creerà un array che contiene tutti i valori o valori di testo per le opzioni < select >
.
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;
});
Tutto quello che devi fare è passare l'array come primo parametro senza parentesi. Le parentesi creano un nuovo array, ma non è necessario farlo perché si sta già passando un array. Basta fare:
$("#CityLocal").autocompleteArray(
MyBigArrayOfOptions,
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
Se capisco correttamente la tua domanda, il seguente codice dovrebbe fare ciò di cui hai bisogno:
myFunction($("#my-select option"));
L'output della query è già una matrice di opzioni che sono discendenti della selezione, quindi non è necessario inserirle in un'altra matrice. In alternativa, se la tua selezione non ha un ID, ma hai l'elemento DOM:
myFunction($("option", theSelect));
Ricollegando questa idea al tuo codice:
$("#CityLocal").autocompleteArray(
$("option", theSelect),
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);