2015-06-19 12 views
8

La mia applicazione web raccoglie i dati con:Somma rosso riga di una tabella in javascript e quindi modificare la tabella

  • id (valore chiave)

  • timestamp

  • valore

Quindi, crea una tabella HTML come questa:

<table> 
    <tr bgcolor="#FFA9A9"> 
    <td> ID1 </td> 
    <td> 20150619T09.43.03</td> 
    <td>VALUE1</td> 
    </tr> 
    <tr> 
    <td> ID2 </td> 
    <td> 20150619T09.43.02</td> 
    <td>VALUE1</td> 
    </tr> 
    <tr bgcolor="#FFA9A9"> 
    <td> ID3 </td> 
    <td> 20150619T09.43.00</td> 
    <td>VALUE2</td> 
    </tr> 
    <tr> 
    <td> ID4 </td> 
    <td> 20150619T09.42.59 </td> 
    <td> VALUE1</td> 
    </tr> 
    <tr bgcolor="#FFA9A9"> 
    <td> ID5 </td> 
    <td> 20150619T09.42.59 </td> 
    <td> VALUE2</td> 
    </tr> 
    <tr> 
    <td> ID6 </td> 
    <td> 20150619T09.42.58</td> 
    <td>VALUE2</td> 
    </tr> 
    <tr> 
    <td> ID7 </td> 
    <td> 20150619T09.42.55 </td> 
    <td> VALUE2 </td> 
    </tr> 
    <tr bgcolor="#FFA9A9"> 
    <td> ID8 </td> 
    <td> 20150619T09.42.40 </td> 
    <td> VALUE2 </td> 
    </tr> 
    <tr> 
    <td> ID9 </td> 
    <td> 20150619T09.42.39 </td> 
    <td> VALUE2 </td> 
    </tr> 
</table> 

Spiegazione: Si ordina il valore timestamp in ordine DESC.

Se, per esempio, t1 è il timestamp per ID1 e 't2' è la marca temporale per ID2, e ...

t1 + 2 seconds >= t2

riga ID2 diventa rosso.

Nel mio esempio:

  • ID1 è rosso (# FFA9A9) causa di ID2 (stesso valore e timestamp tra 2 sec)

  • ID3 è causa rosso di ID5 che è causa rosso ID6.

  • ID8 è causa di rosso ID9

in tal caso ID1 è una copia e ID2 è originale; ID3 e ID5 sono una copia e ID6 è l'originale; ID8 è una copia e ID9 è originale.

Devo contare la copia rossa e mettere il contatore in un'altra cella della riga che è l'originale.

Il risultato del mio esempio dovrebbe essere:

<table> 
    <tr> 
    <td> ID2 </td> 
    <td> 20150619T09.43.02</td> 
    <td>VALUE1</td> 
    <td>1</td> --> one record not shown (ID1) 
    </tr> 

    <tr> 
    <td> ID4 </td> 
    <td> 20150619T09.42.59 </td> 
    <td> VALUE1</td> 
    <td> 0 </td> 
    </tr> 

    <tr> 
    <td> ID6 </td> 
    <td> 20150619T09.42.58</td> 
    <td>VALUE2</td> 
    <td>2</td> --> two records not shown (ID3 and ID5) 
    </tr> 
    <tr> 
    <td> ID7 </td> 
    <td> 20150619T09.42.55 </td> 
    <td> VALUE2 </td> 
    <td> 0 </td> 
    </tr> 
    <tr> 
    <td> ID9 </td> 
    <td> 20150619T09.42.55 </td> 
    <td> VALUE2 </td> 
    <td> 1 </td> --> one record not shown (ID8) 
    </tr> 
</table> 

ne ho bisogno perché ho 3 di raccolta dati e ho bisogno di capire quale evento è lo stesso ripetuto ... Se il valore è il lo stesso e il timestamp sono tra 2 sec è lo stesso evento e ho bisogno di prendere solo il più vecchio in tabella ma ho bisogno anche di mostrare che esiste un'altra copia acquisita di esso ...

Qualsiasi aiuto? posso cambiare classe, il nome o qualsiasi altra cosa, ma ho bisogno di farlo quando la pagina HTML viene caricata e lato client (in modo JavaScript o jQuery) ...

ho bisogno di:

1) di scansione riga della tabella per riga dal primo all'ultimo

2) capire se si tratta di una riga rosso

3) se è una riga rosso devo iniziare un conteggio di righe rosso con lo stesso valore prima fila non rosso con lo stesso valore. poi ho messo il contatore in una nuova cella della stessa fila non rossa ...

Grazie mille !!! (e mi dispiace per il mio cattivo inglese!)

+0

come può il timestamp di due righe essere lo stesso ?? t1 + 2sec> = t2 (2 sec) –

+0

t1 = 20150619T09.43.02, t2 = 20150619T09.43.03 .... t1 + 2sec = 20150619T09.43.04 .... t1 + 2sec> = t2 ... – Revan1988

+1

non in grado per capire la tua domanda ma jquery non è una buona opzione per il calcolo, penso che mentre estraggo i dati dal database dovresti fare il calcolo se ho ragione ... –

risposta

0

Con jQuery è possibile selezionare tutti gli elementi tr con l'attributo bgcolor = "# FFA9A9", quindi utilizzare .size() o .length per ottenere il conteggio.

jQuery('tr[bgcolor="#FFA9A9"]').size(); 

api.jquery.com/attribute-equals-selector

Speranza che è utile.

Edit: Con le linee rosse selezionati come sopra si può anche eseguire un .each() sugli elementi selezionati e analizzare il loro .children()

Edit 2: Forse questo è un approccio utile?

trs = jQuery('tr:not[bgcolor="#FFA9A9"]'); 
redtrs = jQuery('tr[bgcolor="#FFA9A9"]'); 

for (i in trs) 
{ 
    tds = trs.eq(i).children('td'); 
    for (j in redtrs) 
    { 
     redtds = redtrs.eq(j).children('td'); 
     //do your checking here 
    } 
} 

l'idea è selezionare tutti i trs che non sono rossi e tutti i trs che sono rossi. Quindi eseguire iterazioni sui tr non rossi e controllare i loro bambini contro i bambini rossi trs (supponendo che l'ordine dei tds sia sempre lo stesso). tds.eq (0) è l'ID, tds.eq (1) è il timestamp tds.eq (2) il Valore. Quindi puoi confrontare tds.eq (2) == redtds.eq (2) per abbinare i valori. Quando trovi un ritrovamento potresti aumentare un contatore e finire con l'aggiungere un quarto td con il valore del contatore. Prova a leggere i selettori jQuery e il Javascript for in loop (o il jQuery.each che può essere un po 'più confuso per i principianti).

+0

... Non è solo una somma di dati rossi ... ho bisogno di sommare solo i dati rossi dello stesso valore in un timestamp che non è superiore a 2 secondi ... e dopo devo cambiare la tabella spingendo il contatore nella riga corretta ... – Revan1988

+1

Non esiste alcun metodo '.length()' solo la proprietà '.length' - che è ciò che' .size() 'restituisce;) – Andreas

+0

@Andreas ben individuato, grazie. – user3154108

Problemi correlati