|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
[Html e Javascript]Cambiare colore sfondo di una tabella
Ciao,
ho una tabella che si trova all'interno di un div. Questa tabella viene aggiungta dinamicamente all'interno della pagina con javascript in questo modo: document.GetElementsByName("nameDIV").InnerHTML="<table id=\"idtable\" name=\"nametable\"> </table>"; Come faccio a cambiare il colore di sfondo della tabella dopo averla aggiunta dinamicamente? Codice:
<div id="idDIV" name="nameDIV"> <table id="idtable" name="nametable"> </table> </div> |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Quote:
Relativamente alla tua domanda, una volta inserita la tabella essa diviene un elemento del DOM e lo puoi trattare come tutti gli altri. In particolare, risulterà essere il primo nodo figlio del div, e dunque: document.getElementsByName("nameDIV")[0].firstChild.style.backgroundColor = "red";Io ci ho messo il rosso, tu mettici quel che ti pare. Ah, dato che in generale più elementi HTML possono avere lo stesso attributo "name" mentre si suppone che ognuno abbia un unico "id", ti consiglio di usare document.getElementById, che è più veloce e restituisce un elemento unico.
__________________
![]() Ultima modifica di MaxArt : 01-06-2010 alle 18:58. |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Non mi funziona.
Dice che firstchild.style non è definito. Forse il problema è che la tabella è inserita dinamicamente. Comunque ho risolto il tutto modificando alcune cose. Grazie. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
No, non è quello il problema: è che si scrive firstChild, non firstchild.
__________________
![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
In firefox anche i nodi di testo vengono inclusi nella lista di nodi.
Perchè usi getElementsByName quando puoi usare l'id? document.getElementById("idDIV").getElementsByTagName("table")[0].style.backgroundColor = "red"; Se usassi jquery sarebbe tutto più intuitivo: $("#idDIV").children("table:first").css("backgroundColor", "red); |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Ciao,
Ti ringrazio. Darò un occhiata a jQuery. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 523
|
in ogni caso per un migliore disaccoppiamento io personalmente andrei a cambiare (e via jquery come consigliato anche da kk3z) il foglio di stile associato e non direttamente la proprietà background-color
ciao
__________________
AMD Ryzen 5 3600X, ASUS ROG Crosshair VII hero, MSI GeForce RTX 2060 Super Gaming X 8GB, 16GB Corsair Vengeance LPX, Noctua NH-U12S Chromax Black, Samsung 970 EVO Plus 500GB, Corsair RMx Series RM750x, Corsair obsidian 750D |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Ma così facendo la modifica la vedo istantaneamente?
Il cambio di colore intendo. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 523
|
se hai caricato il css dove è contenuta la definizione dello stile in questione, si.
__________________
AMD Ryzen 5 3600X, ASUS ROG Crosshair VII hero, MSI GeForce RTX 2060 Super Gaming X 8GB, 16GB Corsair Vengeance LPX, Noctua NH-U12S Chromax Black, Samsung 970 EVO Plus 500GB, Corsair RMx Series RM750x, Corsair obsidian 750D |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Ok,grazie.
|
![]() |
![]() |
![]() |
#11 | ||
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Quote:
Quote:
Perché con jQuery non impara javascript: praticamente impara jQuery... Poi, voglio dire, scrivi una riga in un modo, scrivi una riga con jQuery, almeno in questo caso...
__________________
![]() |
||
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Io non mi riferisco alla chiamata a getElementsByName() ma all'uso di firstChild, che in firefox in questo caso punta a un textnode (in explorer invece punta alla table).
jquery aiuta nella manipolazione del dom e in ajax, non è che sostituisce tutto javascript. Ultima modifica di kk3z : 03-06-2010 alle 15:55. |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 523
|
Quote:
![]() personalmente credo che la cosa con cui bisogna prendere confidenza da subito sono le API.
__________________
AMD Ryzen 5 3600X, ASUS ROG Crosshair VII hero, MSI GeForce RTX 2060 Super Gaming X 8GB, 16GB Corsair Vengeance LPX, Noctua NH-U12S Chromax Black, Samsung 970 EVO Plus 500GB, Corsair RMx Series RM750x, Corsair obsidian 750D |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Quote:
Non ci fai tutto con jQuery. A mio avviso ha una filosofia abbastanza diversa dal JavaScript "puro" da farmi dire che in pratica si tratta di un altro linguaggio. E questo, invero, fa apprezzare il lavoro di John Resig, ma rimango dell'opinione che per i neofiti sia meglio impararla un po' "più in là", per meglio apprezzare (ed usare) gli strumenti che poi verranno usati.
__________________
![]() |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 523
|
Quote:
![]() per quanto riguarda la faccenda del neofita, quello che volevo dire è che a prescindere dal linguaggio, dal framework o dal prodotto, prendere confidenza da subito con le API è un vantaggio innegabile. chiaramente si tratta di uno sforzo aggiuntivo al semplice imparare a programmare ma è uno sforzo che si ripaga con gli interessi in poco tempo; parlo per esperienza personale ... visto che ho fatto esattamente il contrario ![]()
__________________
AMD Ryzen 5 3600X, ASUS ROG Crosshair VII hero, MSI GeForce RTX 2060 Super Gaming X 8GB, 16GB Corsair Vengeance LPX, Noctua NH-U12S Chromax Black, Samsung 970 EVO Plus 500GB, Corsair RMx Series RM750x, Corsair obsidian 750D |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Anche io ho fatto proprio il contrario. Ma, per quanto apprezzi il lavoro che c'è dietro a jQuery, preferisco sempre non usarlo. Mi sono creato i miei strumenti, senza fronzoli, e nella stragrande maggioranza dei casi uso quelli.
La mia è un'opinione che si riferisce in maniera peculiare a jQuery. Ci sono tante librerie che non hanno lo stesso effetto, diciamo pure che non ti "drogano" facendo di te un programmatore che non può più farne a meno come fa jQuery. Invece, dopo che si ha un po' di esperienza, si può meglio usare e apprezzare l'utilità di quella libreria. Per fare un esempio, prima kk3z ha consigliato di usare .children("table:first"): questa funzione va bene nel caso specifico, ma se andiamo a guardare il codice che gira si vede che fa un casino pazzesco per restituire UN elemento (il che è pure normale, visto che deve fare il parsing di "table:first"). Se si impara da subito a programmare così, non ci si accorge che dal punto di vista delle performance questo fa schifo, e può andare bene solo se si fa un numero limitato di chiamate. Invece, usare .firstChild è veloce e immediato, e può essere usato in ogni caso.
__________________
![]() |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 523
|
Quote:
![]()
__________________
AMD Ryzen 5 3600X, ASUS ROG Crosshair VII hero, MSI GeForce RTX 2060 Super Gaming X 8GB, 16GB Corsair Vengeance LPX, Noctua NH-U12S Chromax Black, Samsung 970 EVO Plus 500GB, Corsair RMx Series RM750x, Corsair obsidian 750D |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:42.