Ordinare option di una select

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Sto provando ad ordinare una select all'interno della quale ho dei valori "disabled" che vorrei fossero ordinati come ultimi.
Ho fatto una cosa del genere, che a livello di principio sembra logica, ma non sortisce alcun effetto.. Sbaglio qualcosa? Avete altre idee per farlo?
Grazie in anticipo.
JavaScript:
 <select name="airport" id="sortbydisabled">
        <option value="" selected=""></option>
        <option value="ACE" disabled="" hidden="">ACE Lanzarote Airport</option>
        <option value="AHO" disabled="" hidden="">AHO Aeroporto di Alghero</option>
        <option value="BGY">BGY Aeroporto di Milano Bergamo-Il Caravaggio</option>
        <option value="BLQ">BLQ Aeroporto di Bologna-Guglielmo Marconi</option>
        <option value="BRI">BRI Aeroporto di Bari-Karol Wojtyła</option>
        <option value="CAG" disabled="" hidden="">CAG Aeroporto di Cagliari Elmas-Mario Mameli</option>
        <option value="CAI" disabled="" hidden="">CAI Cairo International Airport</option>
        <option value="CIA" disabled="" hidden="">CIA Aeroporto di Roma Ciampino-G.B. Pastine</option>
        <option value="CTA" disabled="" hidden="">CTA Aeroporto di Catania Fontanarossa-Vincenzo Bellini</option>
        <option value="FCO">FCO Aeroporto di Roma Fiumicino-Leonardo Da Vinci</option>
        <option value="FLR" disabled="" hidden="">FLR Aeroporto di Firenze Peretola-Amerigo Vespucci</option>
        <option value="FNC" disabled="" hidden="">FNC Madeira Airport</option>
        <option value="IST" disabled="" hidden="">IST Istanbul Airport</option>
        <option value="KUL" disabled="" hidden="">KUL Kuala Lumpur International Airport</option>
        <option value="LIN" disabled="" hidden="">LIN Milano Linate Airport</option>
        <option value="MLE" disabled="" hidden="">MLE Malé International Airport</option>
        <option value="MXP">MXP Aeroporto di Milano Malpensa</option>
        <option value="NAP">NAP Aeroporto di Napoli - Capodichino</option>
        <option value="OLB" disabled="" hidden="">OLB Aeroporto di Olbia Costa Smeralda</option>
        <option value="PMO" disabled="" hidden="">PMO Aeroporto di Palermo Punta Raisi-Falcone e Borsellino</option>
        <option value="PSA" disabled="" hidden="">PSA Pisa International Airport</option>
        <option value="PXO" disabled="" hidden="">PXO Porto Santo Airport</option>
        <option value="RMF" disabled="" hidden="">RMF Marsa Alam International Airport</option>
        <option value="SAW" disabled="" hidden="">SAW Sabiha Gökçen International Airport</option>
        <option value="SSH" disabled="" hidden="">SSH Sharm El Sheikh International Airport</option>
        <option value="SUF" disabled="" hidden="">SUF Lamezia Terme Airport</option>
        <option value="TFS" disabled="" hidden="">TFS Tenerife South Airport</option>
        <option value="TRN" disabled="" hidden="">TRN Aeroporto di Torino Caselle-Sandro Pertini</option>
        <option value="TSF" disabled="" hidden="">TSF Treviso-Sant'Angelo Airport</option>
        <option value="VCE">VCE Aeroporto di Venezia-Marco Polo</option>
        <option value="VRN">VRN Aeroporto di Verona-Valerio Catullo</option>
        <option value="ZNZ" disabled="" hidden="">ZNZ Abeid Amani Karume International Airport</option>
    </select>
    <script>
        let selectList = document.getElementById('sortbydisabled');

        for (el of selectList) {
            if (el.disabled)
                selectList.insertAdjacentElement('afterend', el);
        }

    </script>

Ho provato anche con appendChild() o transformando prima selectlist in array ma nulla. Stesso risultato.
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
439
73
28
Ciao, può andare bene appendChild(). Non so dirti esattamente perché non funziona ma penso che il problema sia nell'uso del ciclo "for of" applicato direttamente sull'elemento <select> che, essendo un elemento live-dom, suppongo vada ad ingarbugliare il ciclo mentre lo manipoli.

Prova ad "estrarre" un nodeList delle option, quindi esegui il ciclo su questo.
Una cosa del genere:
JavaScript:
const selectList = document.getElementById('sortbydisabled');
const options = selectList.querySelectorAll('option');
options.forEach(el => {
    if (el.disabled) selectList.appendChild(el);
});

Non mi è comunque chiaro il fatto che le option abbiano sia l'attributo disabled sia hidden. Di fatto quelle option non saranno visibili, per cui mi chiedo per quale motivo ti interessa ordinare tali elementi se poi non saranno comunque visibili all'utente.
 
  • Like
Reactions: otto9due

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Non mi è comunque chiaro il fatto che le option abbiano sia l'attributo disabled sia hidden. Di fatto quelle option non saranno visibili, per cui mi chiedo per quale motivo ti interessa ordinare tali elementi se poi non saranno comunque visibili all'uten
Pensavo la stessa cosa anche io e inizialmente lo script inseriva addirittura un display: none. Poi mi sono accorto che ne il display ne l'hidden sulle options vengono lette dagli iphone che li visualizza sempre e comunque. Per questo motivo, per forza di cose, ho dovuto aggiungere anche disabled.

Grazie per il suggerimento, faccio dei test e ti dico. A presto, un saluto a tutti.
 
  • Like
Reactions: WmbertSea

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Grazie. Funziona alla grande ;) ti ringrazio per l'intervento.
Avevo provato con un foreach anche io ma continuavo a testare il ciclo su una HTMLCollection. Non sapevo che si potesse fare un forech su un nodeList.
Grazie e a presto
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
439
73
28
Benissimo, sì, potrei sbagliarmi ma penso che il problema fosse proprio nella differenza dei due oggetti: HTMLCollection che è live-DOM e NodeList che è static-DOM.

Entrambi sono iterabili ma, rispetto allo "storico" HTMLCollection, NodeList è ben più recente ed è provvisto di un'interfaccia più attuale, perciò possiede un suo proprio metodo forEach() (tecnicamente uguale all'omonimo metodo dell'oggetto Array).

Per usare forEach() con un HTMLCollection è necessario convertirlo in qualche modo in Array.

Buon proseguimento :)
 

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Infatti avevo provato a fare proprio questo con Array.from() ma non va ugualmente. Una buona occasione per approfondire ulteriormente l'argomento.
Grazie ☺️
 
  • Like
Reactions: WmbertSea
Discussioni simili
Autore Titolo Forum Risposte Data
T come ordinare dei record recuperati da due tabelle MySQL 0
felino [C#] Ordinare un livello specifico di un custom tree .NET Framework 0
G Ordinare un array multidimensionale PHP 4
M Ordinare una query join PHP 2
L [PHP] ordinare per data PHP 3
F [HTML] Google fogli ordinare per colonne HTML e CSS 0
P [PHP] ordinare un array multidimensionale in modo personalizzato PHP 2
T [PHP] ordinare un campo varchar che contiene numeri PHP 6
Trapano Query in php come ordinare per data e anche per ora PHP 7
L [PHP] ordinare xml PHP 0
Trapano [HTML] Ordinare indirizzi, creando un percorso HTML e CSS 3
M Ordinare i valori in query group by PHP 4
L Ordinare articoli dentro categorie e tag in ordine alfabetico wordpress WordPress 1
M Ordinare array (multidimensionale)? PHP 3
ste80 ordinare dati da file di testo PHP 3
R Ordinare alfabeticamente partendo da una PAROLA MySQL 0
M Ordinare visualizzazione record tramite form con input "text" PHP 2
xone Ordinare tramite menù a tendina i risultati di una query già stampati MySQL 0
M Ordinare array multidimensionale con esclusioni Javascript 0
M [PHP]Ordinare dati secondo prezzo PHP 2
borgo italia ordinare un array bidimensionale Snippet PHP 0
zighy ordinare risultati specifici PHP 20
D Ordinare i risultati di una query dalla fine della tabella MySQL 13
ivarello Ordinare dati Var in ordine numerico PHP 9
C Ordinare parole in base alla lunghezza PHP 1
Trapano Ordinare risultati MySQL 6
C Ordinare array in base alla lunghezza dei valori PHP 3
C Ordinare array multidimensionali PHP 0
T.W. Aiuto Per Ordinare Risultati Ricerca Da File CSV PHP 2
C Ordinare alfabeticamente un array e ordinare un secondo array in funzione del primo. Javascript 12
valient13 ordinare in ordine decrescente la lista PHP 2
F Ordinare array bidimensionale PHP 2
P [ASP] [Grauito] Ordinare categoria (era: reder by Cat) Offerte e Richieste di Lavoro e/o Collaborazione 1
G Ordinare query PHP 2
P Ordinare e impaginare una tabella contemporaneamente Javascript 1
novello88 MySQL ORDER BY [Era: ordinare i risultati di una database MySQL] MySQL 1
Monital ordinare il risultato di una query con variabili unite PHP 32
R Ordinare array in base al valore PHP 7
S ordinare array di date PHP 4
R Come ordinare gli articoli per data? Webdesign e Grafica 5
Monital ordinare in una tabella risultati query PHP 10
G ordinare i risultati di una query PHP 4
R Ordinare array in base al valore e alla key PHP 1
A Ordinare query sql in base ai risultati di ricerca PHP 1
M Ordinare il secondo elemento di uno split() PHP 10
N Ordinare per totali Database 0
G VBA e ordinare celle relativamente in Excel 2007 Windows e Software 0
S - Ordinare files uplodati - PHP 0
frankiedeguello Ordinare file per data di creazione PHP 1
T Ordinare dati di un Recordset [era:Grosso problema, chi mi aiuta?] Classic ASP 2

Discussioni simili