Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-13 Per discussione Alessandro Pellizzari

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.

2018-07-11 Per discussione Gollum1
> 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.

2018-07-11 Per discussione Alessandro Pellizzari

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.

2018-07-11 Per discussione Gollum1
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.

2018-07-09 Per discussione Gollum1
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.

2018-07-09 Per discussione Piviul

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.

2018-07-09 Per discussione Gollum1
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.

2018-07-09 Per discussione Lorenzo Breda
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.

2018-07-09 Per discussione Luca Costantino
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.

2018-07-09 Per discussione Gollum1
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.

2018-07-09 Per discussione Federico Di Gregorio

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.

2018-07-08 Per discussione Gollum1
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...