Re: [OT - javascrpt] attivare un div inserito dinamicamente.
On 11/07/2018 18:20, Gollum1 wrote: RowArray.sort(function(a[Column], b[Column]) {return number(a) - number (b)}) ma ottengo un errore nella chiamata della funzione di ordinamento: a e b sono parametri della funzione, non puoi farci operazioni sopra: RowArray.sort(function(a,b) { return number(a[Column]) - number(b[Column]) }) Puoi anche andare oltre e fare function sortingByNumberCol(col) { return function(a,b) { return number(a[col]) - number(b[col])) } } Da usare come RowArray.sort(sortingByNumberCol(2)) che è più pulito che usare una global. Bye.
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
> mi pare di capire (un po' come nella funzione map che mi hai proposto) > che in qualche modo mi basta definire una funzione con due argomenti > qualsiasi, e nel corpo della funzione indicare come è il sistema di > confronto tra questi due elementi... ho compreso giusto, o sto > sbagliando ancora? Evidentemente qualcosa non mi è ancora chiaro... ora mi trovo un un array, in cui ogni campo dell'array è composto da 3 array (array di array) di questo formato: ["", "un testo", "32003"] ok... se RowArray è l'array che devo ordinare, e FieldArray è l'array contenuto in ogni campo di RowArray... come devo mettere la funzione di sort?, prendendo in esame, che io voglia ordinare per il campo Column=2 (l'ultimo campo dell'array FieldArray), che dovrebbe essere quindi un campo numerico... RowArray.sort(function(a, b) {return number(a) - number (b)}) ma non riesco a capire come dirgli che quelli che deve confrontare sono i campi Column=2... ho provato con RowArray.sort(function(a[Column], b[Column]) {return number(a) - number (b)}) ma ottengo un errore nella chiamata della funzione di ordinamento: Uncaught SyntaxError: Unexpected token [ dove la "[" è quella vicina a a, nella chiamata di funzione... cosa mi sfugge? Tnx&Byez -- Gollum1 - http://www.gollumone.it Tesoro, dov'é il mio teoro...
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
On 11/07/2018 10:20, Gollum1 wrote: Ora mi trovo un attimo in imbarazzo... il codice sembra ok, ma non riesco a capire come dovrei affrontare come ordinare per i campi che sono in realtà contenuti nella stringa che è contenuto nell'array... Il mio server strippa gli allegati, quindi non vedo il tuo codice, ma se hai preso l'innerHtml dei vari tr non ne verrai mai fuori. Se puoi, prendi i dati che arrivano dal server, e infilali in qualche modo in un array così: let dati = [ { id: 1, titolo: 'Il primo titolo', }, { id: 2, titolo: 'Il secondo titolo', ... }, ... ] A quel punto ordinarli è semplice, in base a qualsiasi colonna, e per creare le righe della tabella basta un dati.map(function(r) { return ''+r.id+'...'; }) Bye.
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
Ora mi trovo un attimo in imbarazzo... il codice sembra ok, ma non riesco a capire come dovrei affrontare come ordinare per i campi che sono in realtà contenuti nella stringa che è contenuto nell'array... a questo punto non credo che si possa usare la metodologia degli oggetti che compongono le singole righe, in quanto non sono oggetti... dovrei forse fare un array di array e quindi selezionare in quel modo la colonna da andare a ordinare? anche perché non mi è ben chiaro come potrei (anche potesssi indicare degli oggetti dentro la riga dell'array) passare il parametro della colonna alla funzione di ordinamento... allego il file che ho rifatto, spero ancora nei vostri sempre ottimi suggerimenti. -- Gollum1 - http://www.gollumone.it Tesoro, dov'é il mio teoro...
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
Il giorno lun 9 lug 2018 alle ore 13:21 Piviul ha scritto: > non so quanto incida ordinare sui dati e poi sulla tabella comunque > quello soprattutto seguirei i consigli di Federico: copi il DOM della > tabella, la ordini poi la sostituisci ordinata. bhe... stavo pensando, leggendo il codice, che durante la procedura di riordinamento, in realtà vado a generare un array, l'array che contiene tutte le righe del DOM, già formattata, quindi alla fine, potrei ordinare l'array, senza fare gli spostamenti nel DOM, ed una volta fatto l'ordinamento, riscrivere tutto l'array nel DOM... l'impatto sul codice sarebbe a questo punto veramente minimo. e cambierei solamente il target dell'ordinamento reale, appena ho un attimo di tempo mi ci metto, e poi vi faccio sapere. Byez -- Gollum1 - http://www.gollumone.it Tesoro, dov'é il mio teoro...
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
Il 09/07/2018 11:33, Gollum1 ha scritto: [...] ho capito l'arcano... il fatto è che sto rimettendo mano a codice già preesistente... farò così allora... memorizzo il tutto in un array, quindi tutte le operazioni di ordinamento le faccio nell'array, e solo alla fine ripopolo la vecchia tabella del DOM con i nuovi dati elaborati che è anche più logico come concetto (a questo punto si possono usare gli algoritmi già inclusi in js, per fare l'ordinamento, senza reinventare l'acqua calda, come mi è stato fatto notare)... ok, il restailing diventa anche più sistemico, e non solo grafico. non so quanto incida ordinare sui dati e poi sulla tabella comunque quello soprattutto seguirei i consigli di Federico: copi il DOM della tabella, la ordini poi la sostituisci ordinata. Piviul
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
Il 9 luglio 2018 10:52:56 CEST, Lorenzo Breda ha scritto: >Il giorno lun 9 lug 2018 alle ore 10:22 Gollum1 > >ha scritto: > >> >La div di blocco non serve a niente, quello che devi fare è >> >sganciare la tabella/le righe da riordinare dal DOM e riagganciarle >> >alla >> >fine. >> >> Questo non mi è chiaro, se le tolgo dal DOM, come posso poi invertire >le >> righe? >> > >Tu stai cercando di ordinare dei dati. Devi lasciar perdere il dom, >mettere >i dati in un array/dizionario/quelcheè, ordinarli con un opportuno >algoritmo di ordinamento (Javascript ne mette a disposizione a decine) >e >ricostruire poi la tabella con i dati ordinati. > >Se provi a ordinare la tabella invece dei dati hai ovviamente un >hoveread >pauroso. ho capito l'arcano... il fatto è che sto rimettendo mano a codice già preesistente... farò così allora... memorizzo il tutto in un array, quindi tutte le operazioni di ordinamento le faccio nell'array, e solo alla fine ripopolo la vecchia tabella del DOM con i nuovi dati elaborati che è anche più logico come concetto (a questo punto si possono usare gli algoritmi già inclusi in js, per fare l'ordinamento, senza reinventare l'acqua calda, come mi è stato fatto notare)... ok, il restailing diventa anche più sistemico, e non solo grafico. byez -- gollum1 Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e gli errori, maledetto correttore automatico.
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
Il giorno lun 9 lug 2018 alle ore 10:22 Gollum1 ha scritto: > >La div di blocco non serve a niente, quello che devi fare è > >sganciare la tabella/le righe da riordinare dal DOM e riagganciarle > >alla > >fine. > > Questo non mi è chiaro, se le tolgo dal DOM, come posso poi invertire le > righe? > Tu stai cercando di ordinare dei dati. Devi lasciar perdere il dom, mettere i dati in un array/dizionario/quelcheè, ordinarli con un opportuno algoritmo di ordinamento (Javascript ne mette a disposizione a decine) e ricostruire poi la tabella con i dati ordinati. Se provi a ordinare la tabella invece dei dati hai ovviamente un hoveread pauroso. -- Lorenzo Breda
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
Ma perche' perdere la testa a reinventare l'acqua calda, visto che ci sono gia' dozzine di algoritmi di ordinamento storici, testati, a complessita' nota, e gia' implementati? Il giorno lun 9 lug 2018 alle ore 10:21 Gollum1 ha scritto: > Il 9 luglio 2018 09:13:19 CEST, Federico Di Gregorio ha > scritto: > >On 07/08/2018 11:57 PM, Gollum1 wrote: > > >> va detto che richiedere i dati ordinati al server > >> sarebbe molto più veloce, per riordinare circa 1800 elementi, ci > >mette > >> un minuto secco. > > > >Non ha senso, 1800 righe in JS sono niente. Probabilmente stai > >chiedendo > >al browser di ridisegnare la pagina ogni volta che scambi di posto due > >righe. > > inverto direttamente tra di loro le due righe da scambiare, a livello di > DOM. > > immagina che il codice originale che avevo trovato, riavviava la scansione > dall'inizio ad ogni inversione, mentre io inverto tra di loro quelle che > vanno invertite, e poi procedo con quelle seguenti. Così facendo, ad ogni > ciclo diminuisci di una riga il set di righe da controllare, perché > sicuramente ho spostato in fondo la riga di valore più elevato. > > in pratica, se adesso ci mette un minuto, con il codice originale ce ne > metteva circa dieci. > > >La div di blocco non serve a niente, quello che devi fare è > >sganciare la tabella/le righe da riordinare dal DOM e riagganciarle > >alla > >fine. > > Questo non mi è chiaro, se le tolgo dal DOM, come posso poi invertire le > righe? > > >> o almeno così vorrei che fosse, invece mi trovo nella situazione che > >> fino al termine dell'ordinamento non appare la pagina sovrapposta di > >> inibizione al sito, e naturalmente al termine viene messa e poi > >> tolta... > > > >Certo, perché finché non ridai il controllo al browser non puoi vedere > >gli effetti di modifiche al DOM. > > è questo è il motivo per cui non vedo neppure lo scambio tra le varie > righe, ma in questo caso non è sicuramente un problema. > > > Puoi usare il trucco di far passare un > > > >tick, con una cosa del tipo: > > > >function wait_page() { /* codice */ } > >function sort_rows() { /* codice */ } > > > >wait_page(); > > > >window.setTimeout(sort_rows, 0); > > > > penso di aver capito concettualmente, in pratica mi dici che devo > provocare un evento che obblighi la pagina ad essere ridisegnata, devo > vedermi di preciso cosa fa il codice che mi hai scritto, perché nel mio > caso, il lancio della wait_page è fatto all'interno della sort_table, > quindi potrei fare quella istruzione all'interno della sort stessa? > > >Anche se è completamente off-topic, ci fai vedere l'ordinamento? Magari > > > >lo portiamo ad essere istantaneo... > > > > molto volentieri, appena rimetto mano sul computer e riesco a connetterlo > alla rete (sono in ferie l'estero, e il codice risiede su un mio computer > remoto, sto sfruttando la connettività altrui, ma per qualche giorno sarò > in altra località, e non so se troverò qualcuno che mi permette di > connettermi). > > grazie in anticipo per il supporto. > > > byez > -- > gollum1 > > Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e > gli errori, maledetto correttore automatico. > >
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
Il 9 luglio 2018 09:13:19 CEST, Federico Di Gregorio ha scritto: >On 07/08/2018 11:57 PM, Gollum1 wrote: >> va detto che richiedere i dati ordinati al server >> sarebbe molto più veloce, per riordinare circa 1800 elementi, ci >mette >> un minuto secco. > >Non ha senso, 1800 righe in JS sono niente. Probabilmente stai >chiedendo >al browser di ridisegnare la pagina ogni volta che scambi di posto due >righe. inverto direttamente tra di loro le due righe da scambiare, a livello di DOM. immagina che il codice originale che avevo trovato, riavviava la scansione dall'inizio ad ogni inversione, mentre io inverto tra di loro quelle che vanno invertite, e poi procedo con quelle seguenti. Così facendo, ad ogni ciclo diminuisci di una riga il set di righe da controllare, perché sicuramente ho spostato in fondo la riga di valore più elevato. in pratica, se adesso ci mette un minuto, con il codice originale ce ne metteva circa dieci. >La div di blocco non serve a niente, quello che devi fare è >sganciare la tabella/le righe da riordinare dal DOM e riagganciarle >alla >fine. Questo non mi è chiaro, se le tolgo dal DOM, come posso poi invertire le righe? >> o almeno così vorrei che fosse, invece mi trovo nella situazione che >> fino al termine dell'ordinamento non appare la pagina sovrapposta di >> inibizione al sito, e naturalmente al termine viene messa e poi >> tolta... > >Certo, perché finché non ridai il controllo al browser non puoi vedere >gli effetti di modifiche al DOM. è questo è il motivo per cui non vedo neppure lo scambio tra le varie righe, ma in questo caso non è sicuramente un problema. > Puoi usare il trucco di far passare un > >tick, con una cosa del tipo: > >function wait_page() { /* codice */ } >function sort_rows() { /* codice */ } > >wait_page(); > >window.setTimeout(sort_rows, 0); > penso di aver capito concettualmente, in pratica mi dici che devo provocare un evento che obblighi la pagina ad essere ridisegnata, devo vedermi di preciso cosa fa il codice che mi hai scritto, perché nel mio caso, il lancio della wait_page è fatto all'interno della sort_table, quindi potrei fare quella istruzione all'interno della sort stessa? >Anche se è completamente off-topic, ci fai vedere l'ordinamento? Magari > >lo portiamo ad essere istantaneo... > molto volentieri, appena rimetto mano sul computer e riesco a connetterlo alla rete (sono in ferie l'estero, e il codice risiede su un mio computer remoto, sto sfruttando la connettività altrui, ma per qualche giorno sarò in altra località, e non so se troverò qualcuno che mi permette di connettermi). grazie in anticipo per il supporto. byez -- gollum1 Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e gli errori, maledetto correttore automatico.
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
On 07/08/2018 11:57 PM, Gollum1 wrote: Ciao Raga, scusate per questo OT, ma siete gli unici che conosco, che potrebbero darmi una risposta. ho fatto uno script di ordinamento di una tabella caricata da un SQL. Lo scopo sarebbe quello di evitare di richiedere un nuovo set di dati diversamente ordinato al server SQL (mariaDB nello specifico), ho voluto, quindi, provare a fare l'ordinamento direttamente lato client con uno script js, va detto che richiedere i dati ordinati al server sarebbe molto più veloce, per riordinare circa 1800 elementi, ci mette un minuto secco. Non ha senso, 1800 righe in JS sono niente. Probabilmente stai chiedendo al browser di ridisegnare la pagina ogni volta che scambi di posto due righe. La div di blocco non serve a niente, quello che devi fare è sganciare la tabella/le righe da riordinare dal DOM e riagganciarle alla fine. proprio per ovviare al fatto che rimane bloccato il browser per tutto il tempo che viene eseguito l'ordinamento, ho voluto inibire la pagina, sovrapponendo un div con il classico gif di attesa... questo div lo aggancio in modo dinamico al body, all'inizio dell'ordinamento, e poi lo cancello al termine... o almeno così vorrei che fosse, invece mi trovo nella situazione che fino al termine dell'ordinamento non appare la pagina sovrapposta di inibizione al sito, e naturalmente al termine viene messa e poi tolta... Certo, perché finché non ridai il controllo al browser non puoi vedere gli effetti di modifiche al DOM. Puoi usare il trucco di far passare un tick, con una cosa del tipo: function wait_page() { /* codice */ } function sort_rows() { /* codice */ } wait_page(); window.setTimeout(sort_rows, 0); nella console del browser vedo che le varie parti di codice vengono eseguite quando dovrebbero, allora perché non appare la pagina di attesa durante l'ordinamento? a seguire il codice del mio script, naturalmente epurato di tutta la parte non necessaria dell'ordinamento: [snip] Anche se è completamente off-topic, ci fai vedere l'ordinamento? Magari lo portiamo ad essere istantaneo... federico
Re: [OT - javascrpt] attivare un div inserito dinamicamente.
Il giorno dom 8 lug 2018 alle ore 23:57 Gollum1 ha scritto: > > questo div lo aggancio in modo dinamico al body, all'inizio > dell'ordinamento, e poi lo cancello al termine... > per completezza, posso confermare che il div appare nel DOM (lo vedo nell'inspector) all'attivazione della procedura, e sparisce al termine della stessa... ma non viene mai visualizzato. -- Gollum1 - http://www.gollumone.it Tesoro, dov'é il mio teoro...