{"id":308,"date":"2008-10-17T10:11:57","date_gmt":"2008-10-17T08:11:57","guid":{"rendered":"http:\/\/nyams.planbweb.com\/blog\/?p=308"},"modified":"2008-10-17T10:11:57","modified_gmt":"2008-10-17T08:11:57","slug":"manipuler-une-table-via-le-dom","status":"publish","type":"post","link":"https:\/\/nyamsprod.com\/blog\/manipuler-une-table-via-le-dom\/","title":{"rendered":"Manipuler une table via le DOM"},"content":{"rendered":"<div class=\"message warning\">\n<p><strong>Attention:<\/strong> Les informations de ce billet sont susceptibles d'&ecirc;tre obsol&egrave;tes car vieux de plus 2 ans.<\/p>\n<p><strong>Warning: <\/strong> The information you are reading may be obsolete, this post was published more than 2 years ago.<\/p>\n<\/div><p>Lorsque l&#8217;on apprend le DOM, <a title=\"Cr\u00e9ation d'une table via DOM Level 1\" href=\"http:\/\/nyams.planbweb.com\/tutorial-dom-16.html\">la plupart des didactitiels<\/a> que l&#8217;on trouve sur le net se termine en montrant comment on peut cr\u00e9er &#8220;<em>from scratch<\/em>&#8221; une table en utilisant uniquement les propri\u00e9t\u00e9s du DOM Level 1. Du fait de la complexit\u00e9 de la structure d&#8217;une table en HTML, cet exemple montre l&#8217;efficacit\u00e9 du DOM, mais oublie de mentionner au d\u00e9veloppeur l&#8217;existence de propri\u00e9t\u00e9s et de m\u00e9thodes DOM plus simples pour manipulation les tables HTML.<!--more--><br \/>\n<a href=\"http:\/\/www.nyamsprod.com\/blog\/wp-content\/uploads\/2008\/10\/dom_table.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-328\" title=\"DOM Tables pour les nuls\" src=\"http:\/\/www.nyamsprod.com\/blog\/wp-content\/uploads\/2008\/10\/dom_table-150x150.gif\" alt=\"\" width=\"150\" height=\"150\" \/><\/a>Pour utiliser ces m\u00e9thodes et ces propri\u00e9t\u00e9s sp\u00e9cifiques, il faut tout d&#8217;abord pouvoir s\u00e9lectionner la table que l&#8217;on veut manipuler. Pour cela, rien de plus simple que d&#8217;utiliser <code>getElementById<\/code> par exemple. Une fois la table s\u00e9lectionn\u00e9e, la manipulation de celle-ci devient un jeu d&#8217;enfant. Le DOM va repr\u00e9senter la table comme \u00e9tant un tableau compos\u00e9 de lignes (<code>rows<\/code>) et chacune d&#8217;entre elle sera compos\u00e9e de cellules (<code>cells<\/code>). Ainsi, si je veux acc\u00e9der \u00e0 la troisi\u00e8me case de la 5\u00e8me ligne de ma table je pourrais \u00e9crire le code suivant :<\/p>\n<pre><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">var mycell = document.getElementById(&#039;matable&#039;).rows&#x5B;2].cells&#x5B;4];\n\/\/Rappel : en javascript l&#039;indexation des tableau commence par 0<\/pre>\n<p>Il existe une multitude de m\u00e9thodes sp\u00e9cifiques et gr\u00e2ce \u00e0 celles-ci et au DOM on peut plus facilement <a href=\"\/test\/tableau\/demo.html\">construire une table<\/a>. Petit b\u00e9mol, <strong>Il faudra se rappeler que si l&#8217;on peut acc\u00e9der aux balises sp\u00e9cifiques des cellules, <code>th<\/code> et <code>td<\/code>, via la m\u00e9thode <code>cells<\/code>, en revanche, on ne peut pas cr\u00e9er de balises <code>th<\/code> avec la m\u00e9thode d&#8217;insertion de cellule <code>insertCell<\/code>.<\/strong> <a href=\"\/test\/tableau\/demo.html\"><\/a><\/p>\n<p><a href=\"\/test\/tableau\/demo.html\">Retirer<\/a> ou \u00a0<a href=\"\/test\/tableau\/demo.html\">ajouter une ligne<\/a> est tout aussi facile. Noter que pour ajouter une ligne en fin de tableau, il suffit de donner comme index <code>-1<\/code> \u00e0 la m\u00e9thode <code>insertRow<\/code>. Autre remarque, l&#8217;ajout de cellules lors de la cr\u00e9ation d&#8217;une ligne n&#8217;est pas obligatoire, <code>insertRow<\/code> ajoutera la ligne mais celle-ci ne contiendra aucune cellule.  Que peut-on retirer de ces exemples ?<\/p>\n<ol>\n<li>Les lignes et les cellules sont manipul\u00e9es en fonction de leur index dans le tableau qui repr\u00e9sente notre table. Lors du changement du nombre de lignes ou de cellules, le tableau est  automatiquement r\u00e9-ind\u00e9x\u00e9.<\/li>\n<li>La balise de r\u00e9f\u00e9rence \u00e0 partir de laquelle la manipulation des lignes est r\u00e9alis\u00e9e est tr\u00e8s importantes. En fonction de cette balise, (<code>table<\/code>, <code>thead<\/code>, <code>tfoot<\/code>, <code>tbody<\/code>) l&#8217;indexation et donc la manipulation des lignes est diff\u00e9rentes.<\/li>\n<li>Lorsque l&#8217;on cr\u00e9e une table via javascript la balise <code>tbody<\/code> est implicitement cr\u00e9\u00e9e par le navigateur. Une table pouvant contenir plusieurs <code>tbody<\/code>, la localisation du <code>tbody<\/code> que vous d\u00e9sirez manipuler peut se faire avec la m\u00e9thode DOM <code>getElementsByTagName<\/code>.<\/li>\n<li>La balise de r\u00e9f\u00e9rence lors de la manipulation des cellules via leurs m\u00e9thodes respectives, <code>insertCell<\/code> et <code>deleteCell<\/code> est leur ligne parent (<code>tr<\/code>).<\/li>\n<li>Il existe une diff\u00e9rence majeur entre <code>deleteCell<\/code>, <code>deleteRow<\/code> et <code><a title=\"La m\u00e9thode RemoveNode du DOM expliqu\u00e9e\" href=\"http:\/\/nyams.planbweb.com\/tutorial-dom-15.html\">removeNode<\/a><\/code>. <code>removeNode<\/code>, \u00e0 l&#8217;inverse de <code>deleteCell<\/code> et de <code>deleteRow<\/code> n&#8217;efface pas d\u00e9finitivement le noeud du document et permet de r\u00e9-ins\u00e9rer celui-ci ailleurs.<\/li>\n<\/ol>\n<p>En mixant ces diff\u00e9rentes m\u00e9thodes avec le DOM et le javascript de tous les jours j&#8217;ai pu r\u00e9aliser <a href=\"\/test\/tableau\/index.html\">un script qui me permet de faire bouger les diff\u00e9rentes lignes d&#8217;un tableau<\/a> tr\u00e8s facilement. Il existe d&#8217;autres <a title=\"toutes les m\u00e9thodes sp\u00e9cifiques pour la manipulation des tables\" lang=\"en\" href=\"http:\/\/www.javascriptkit.com\/domref\/tablemethods.shtml\">propri\u00e9t\u00e9s sp\u00e9cifiques aux tables<\/a>, mais je n&#8217;ai expos\u00e9 que les m\u00e9thodes que j&#8217;ai estim\u00e9 les plus utiles.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comment manipuler plus facilement avec des m\u00e9thodes et des propri\u00e9t\u00e9s DOM sp\u00e9cifiques les tableaux en HTML  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[5],"tags":[130,131,153,154,163,279,281,292,509,518,526],"class_list":["post-308","post","type-post","status-publish","format-standard","hentry","category-web","tag-createtfoot","tag-createthead","tag-deletecell","tag-deleterow","tag-dom","tag-insertcell","tag-insertrow","tag-javascript","tag-table","tag-tbodies","tag-thead"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/comments?post=308"}],"version-history":[{"count":0,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/308\/revisions"}],"wp:attachment":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/media?parent=308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/categories?post=308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/tags?post=308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}