Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1258 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS]Inserer une ligne après la ligne sur laquelle on clique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JS]Inserer une ligne après la ligne sur laquelle on clique

n°1562879
Alisteroid
Posté le 21-05-2007 à 13:55:53  profilanswer
 

Bonjour à tous,  
 
Je cherche à inserer dans un tableau HTML, juste après la ligne sur laquelle j'ai cliqué.
 
J'ai fait :
 
HTML

Code :
  1. <tr onclick="insertRow(this)"></tr>


pour chaque ligne de mon tableau
 
JS

Code :
  1. function insertRow(row)
  2. //Récupération du numéro de ligne sur laquelle j'ai cliqué
  3. var indexligne_to_insert = parseInt(row.parentNode.rowIndex) + 1;
  4. tr = document.getElementById('tableau').insertRow(parseInt(indexligne_to_insert));


 
Malheureusement je m'apercoit que la fonction insertRow(), n'accepte que 0,1 et -1 comme valeur :/
Je vois pas trop comment faire   :love:  
Aidez moi ou je tue mon chien  :love:


Message édité par Alisteroid le 21-05-2007 à 13:57:02
mood
Publicité
Posté le 21-05-2007 à 13:55:53  profilanswer
 

n°1562888
flo850
moi je
Posté le 21-05-2007 à 14:07:42  profilanswer
 

je veux une tof du chien avant de repondre :D
 
sinon  
1- tu crée a ligne comme il faut avec dom ( avec des td = document.createElement('td') , un  tr = document.createElement('tr') et des tr.appendChild(td)  
 
2- si tu insere la ligne a la fin de ton tableau ( row.nextSibling est null ) tu fait un row.parentNode.appendChild(tr)
 
3 sinon, tu l'insere avant la suivante avec un row.parentNode.insertBefore(tr,row )  
 

n°1562890
Alisteroid
Posté le 21-05-2007 à 14:10:04  profilanswer
 

Tu pourrais me détailler la fonction un peu comme j'ai fait? je mélange un peu tout dans ce que tu me dis, et le JS c'est pas trop mon truc :/


Message édité par Alisteroid le 21-05-2007 à 14:10:11
n°1562893
flo850
moi je
Posté le 21-05-2007 à 14:12:07  profilanswer
 

techniquement, j'ai mis plus de detail que toi( vu que j'utilse des fonctions qui existent reellement ) :D

 

apres, je te laisse un peux voir comment fonctionnnent les fct que je te donne ( en plus sans savoir la gueule de ton tableau , ca va etre chaud d'en faire plus )

 

a moins que tu n'ai des questions précises


Message édité par flo850 le 21-05-2007 à 14:12:21
n°1562906
Alisteroid
Posté le 21-05-2007 à 14:22:05  profilanswer
 

Code :
  1. function insertRow(row){
  2.       // Nouveau TD
  3.      var td= document.createElement('td');
  4.      td.appendChild(document.createTextNode('Nouvelle cellule '));
  5.      // Nouveau TD
  6.      var td2 = document.createElement('td');
  7.      // Nouveau TR
  8.      var tr = document.createElement('tr');
  9.      tr.appendChild(td);
  10.      tr.appendChild(td2);
  11.      // Ajout du nouveau TR au tableau
  12.     row.parentNode.insertBefore(tr,row )
  13. }


Putain, on est obligé de faire le travail soit même maintenant  [:zytrasnif]  
Bon ça marche, j'ai encore un truc, pour mettre un colspan sur une cellule, je fais  

Code :
  1. td.setAttribute("rowspan",2);

??
 
Merci beaucoup de ton aide, et de ta rapidité.
 
Et mes fonction utilisée au debut existent  [:cerveau thalis]  
 [:cerveau fuck]


Message édité par Alisteroid le 21-05-2007 à 14:24:52
n°1562910
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-05-2007 à 14:25:17  profilanswer
 

nan mais nan hein :o
insertRow fait ça très bien, c'est ptêt pas la peine d'en recoder une.
Et au passage insertRow prend bien un index et pas seulement 0,1 ou -1.

 

Par contre la propriété rowIndex c'est sur une ligne alors que tu l'as fait remonté au parentNode ( le tableau) ça risque donc pas de marcher.

 

Enfin pour qu'une "ligne"(tr) soit valide en DOM, il lui faut contenir au moins un td ( ce qui n'est pas le cas dans ton exemple).

 

Bref la fonction à peine retouché et qui "doit" marcher c'est:

Code :
  1. function insertRow(row){
  2.       var iL = parseInt(row.rowIndex) + 1;
  3.       tr = document.getElementById('tableau').insertRow(iL);
  4.       tr.innerHTML = 'new index:'+tr.rowIndex;
  5.     }
 

Note: un petit oeil sur la doc t'aurais appris tout ça: http://developer.mozilla.org/en/do [...] .insertRow

Message cité 2 fois
Message édité par anapajari le 21-05-2007 à 14:25:55
n°1562911
flo850
moi je
Posté le 21-05-2007 à 14:25:43  profilanswer
 

:sol:


Message édité par flo850 le 21-05-2007 à 14:25:51
n°1562919
flo850
moi je
Posté le 21-05-2007 à 14:28:36  profilanswer
 

anapajari a écrit :

nan mais nan hein :o
insertRow fait ça très bien, c'est ptêt pas la peine d'en recoder une.
Et au passage insertRow prend bien un index et pas seulement 0,1 ou -1.
 
Par contre la propriété rowIndex c'est sur une ligne alors que tu l'as fait remonté au parentNode ( le tableau) ça risque donc pas de marcher.
 
Enfin pour qu'une "ligne"(tr) soit valide en DOM, il lui faut contenir au moins un td ( ce qui n'est pas le cas dans ton exemple).
 
Bref la fonction à peine retouché et qui "doit" marcher c'est:

Code :
  1. function insertRow(row){
  2.       var iL = parseInt(row.rowIndex) + 1;
  3.       tr = document.getElementById('tableau').insertRow(iL);
  4.       tr.innerHTML = 'new index:'+tr.rowIndex;
  5.     }


 
Note: un petit oeil sur la doc t'aurais appris tout ça: http://developer.mozilla.org/en/do [...] .insertRow


c'est vrai que j'avais pas pensé a insertRow + innerHTML
mais je préfère faire les cases a la main pour gérer le contenu , et les styles à appliquer

n°1562924
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-05-2007 à 14:31:37  profilanswer
 

nan mais le inner il est violement goret faut pas faire ça !!!
C'était juste pour voir quelque chose que je l'ai laissé trainé! [:dawak]
On est censé faire du insertCell et du createTextNode pour mettre des données dedans

 

note: j'ai par contre pas compris ton argument sur les styles :o

Message cité 1 fois
Message édité par anapajari le 21-05-2007 à 14:31:59
n°1562926
Alisteroid
Posté le 21-05-2007 à 14:31:46  profilanswer
 

anapajari a écrit :

nan mais nan hein :o
insertRow fait ça très bien, c'est ptêt pas la peine d'en recoder une.
Et au passage insertRow prend bien un index et pas seulement 0,1 ou -1.

 

Par contre la propriété rowIndex c'est sur une ligne alors que tu l'as fait remonté au parentNode ( le tableau) ça risque donc pas de marcher.

 

Enfin pour qu'une "ligne"(tr) soit valide en DOM, il lui faut contenir au moins un td ( ce qui n'est pas le cas dans ton exemple).

 

Bref la fonction à peine retouché et qui "doit" marcher c'est:

Code :
  1. function insertRow(row){
  2.       var iL = parseInt(row.rowIndex) + 1;
  3.       tr = document.getElementById('tableau').insertRow(iL);
  4.       tr.innerHTML = 'new index:'+tr.rowIndex;
  5.     }
 

Note: un petit oeil sur la doc t'aurais appris tout ça: http://developer.mozilla.org/en/do [...] .insertRow


Merci pour ton aide aussi, j'ai cherché aussi t'inquiete pas j'ai ramé une heure avant de poster, je viens pas chialer ici au moindre probleme  :D
Bref merci encore je crois que je vais continuer sur ma solution bien plus simple, mon site ne doit être compatible que IE6, donc c'est très bien :D, on me demande d'aller au plus vite, du moment que ça marche, c'est bien :/. En touyt cas je garde pour moi, l'autre solution :D


Message édité par Alisteroid le 21-05-2007 à 14:32:45
mood
Publicité
Posté le 21-05-2007 à 14:31:46  profilanswer
 

n°1562935
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-05-2007 à 14:37:20  profilanswer
 

marche très bien avec IE6 ce que j'ai filé plus haut :o

n°1562936
Alisteroid
Posté le 21-05-2007 à 14:38:17  profilanswer
 

C'est ce que je dis :D

n°1562937
Alisteroid
Posté le 21-05-2007 à 14:38:50  profilanswer
 

parseInt(row.rowIndex) me rend NaN :/

n°1562950
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-05-2007 à 14:44:10  profilanswer
 

code de ta page? Parce que http://chezmoicamarche.com/
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Stric//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5.     <title>Insert Row</title>
  6.     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
  7.     <script type="text/javascript">
  8.     function insertRow(row){
  9.       var iL = parseInt(row.rowIndex) + 1;
  10.       var tr = document.getElementById('tableau').insertRow(iL);
  11.       var td = tr.insertCell(0);
  12.       td.appendChild(document.createTextNode('index:'+tr.rowIndex));
  13.       var td2 = tr.insertCell(1);
  14.       td2.appendChild(document.createTextNode('toto'));
  15.       //en bonux je rajouterais ça:
  16.       tr.onclick = row.onclick;
  17.     }
  18.     </script>
  19. </head>
  20. <body>
  21. <table id="tableau">
  22. <tr onclick="insertRow(this)"><td>A</td><td>1</td></tr>
  23. <tr onclick="insertRow(this)"><td>B</td><td>1</td></tr>
  24. <tr onclick="insertRow(this)"><td>C</td><td>1</td></tr>
  25. <tr onclick="insertRow(this)"><td>D</td><td>1</td></tr>
  26. <tr onclick="insertRow(this)"><td>E</td><td>1</td></tr>
  27. </table>
  28. </body>
  29. </html>


n°1562961
flo850
moi je
Posté le 21-05-2007 à 14:51:08  profilanswer
 

anapajari a écrit :

nan mais le inner il est violement goret faut pas faire ça !!!
C'était juste pour voir quelque chose que je l'ai laissé trainé! [:dawak]
On est censé faire du insertCell et du createTextNode pour mettre des données dedans  
 
note: j'ai par contre pas compris ton argument sur les styles :o


J'ai des styles differents suivant les lignes et les colonnes sur le style sur lequel je bosse. Donc j'ai un( des ) classes  a metrte sur le tr , et parfois une ( des ) classes a mettre sur le td  
 
pour la petite histoire, le tr sert change de couleur toutes les lignes ( classique )  
les td changent de couleur pour afficher par exemple la plus grosse valeur du tableau,  ou une valeur superieure a un seuil , ...  
 
au final , ca va quasi aussi vite avec createElement('td')

n°1562984
Alisteroid
Posté le 21-05-2007 à 15:08:33  profilanswer
 

Arf la galère, mon code fait 400 lignes, c'est un énrome tableau de stats, et j'avais pas vu que j'avais mis mon evennement JS sur un TD au lieu du TR :/
 
Merci énormément à vous deux :jap:

n°1562991
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-05-2007 à 15:19:08  profilanswer
 

flo850 a écrit :

J'ai des styles differents suivant les lignes et les colonnes sur le style sur lequel je bosse. Donc j'ai un( des ) classes  a metrte sur le tr , et parfois une ( des ) classes a mettre sur le td  
 
pour la petite histoire, le tr sert change de couleur toutes les lignes ( classique )  
les td changent de couleur pour afficher par exemple la plus grosse valeur du tableau,  ou une valeur superieure a un seuil , ...  
 
au final , ca va quasi aussi vite avec createElement('td')


Bin ça change rien du tout et ça va aussi tout court[:spamafote]
Le insertRow c'est exactement un createElement('tr') + append dans le tableau. D'ailleurs insertRow te retourne une référence sur ton obj tr avec les mêmes propriétés qu'un createElement.
Et pareil pour insertCell (createElement('td') + append).
Par contre IE a tendance à mieux tolérer le bourrinage de ligne via les insert* qu'en DOM pur.
 

Alisteroid a écrit :

Arf la galère, mon code fait 400 lignes, c'est un énrome tableau de stats, et j'avais pas vu que j'avais mis mon evennement JS sur un TD au lieu du TR :/


[:bravo]
 

n°1562992
flo850
moi je
Posté le 21-05-2007 à 15:20:27  profilanswer
 

anapajari a écrit :

Bin ça change rien du tout et ça va aussi tout court[:spamafote]
Le insertRow c'est exactement un createElement('tr') + append dans le tableau. D'ailleurs insertRow te retourne une référence sur ton obj tr avec les mêmes propriétés qu'un createElement.
Et pareil pour insertCell (createElement('td') + append).
Par contre IE a tendance à mieux tolérer le bourrinage de ligne via les insert* qu'en DOM pur.


bon alors je me complique la vie pour rien ( en meme temps ca change pas grd chose niveau quantite de code)  
 

n°1562993
Alisteroid
Posté le 21-05-2007 à 15:20:33  profilanswer
 

Bon une toute dernière question promis juré :
Si je veux attribuer la fonction delerow à l'evenement onclick pour la nouvelle ligne comment dois je le déclarer?J'ai essayé différentes trucs sans succes.

 

En fait mon but est d'inserer une ligne lorsque je clique sur une ligne et de la supprimer lorsque je clique sur la ligne d'origine ou sur la ligne crée.

 


Message édité par Alisteroid le 21-05-2007 à 15:25:15
n°1562995
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-05-2007 à 15:29:50  profilanswer
 

au lieu de:

Code :
  1. //en bonux je rajouterais ça:
  2. tr.onclick = row.onclick;


mettre

Code :
  1. tr.onclick = function (){
  2.   this.parentNode.deleteRow(this.rowIndex);
  3. }


et lire la doc: http://developer.mozilla.org/en/do [...] .deleteRow

 

edit: et pour que ça fait pareil sur la ligne d'origine, il faut changer le handler du row "d'origine" en t'inspirant de ça


Message édité par anapajari le 21-05-2007 à 15:31:26
n°1562998
Alisteroid
Posté le 21-05-2007 à 15:31:14  profilanswer
 

[:cerveau boulay]  
 
 
 [:cerveau yamimakai]  
 
Merci de votre patience  [:cerveau atsuko]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS]Inserer une ligne après la ligne sur laquelle on clique

 

Sujets relatifs
Retour à la ligne précédentePROJET CREATION JEU EN LIGNE
facture en pdf en lignealler a la ligne dans un fichier texte
Inserer 2 valeurs dans 2 tables differentestimestamp à insérer dans DB2
Compactage BDD par ligne de commandePb lors de la mise en ligne d'un diapo Flash
Probleme de mise en ligne apres upload des htmlInserer un listbox en html
Plus de sujets relatifs à : [JS]Inserer une ligne après la ligne sur laquelle on clique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR