• JavaScript>Éléments dans un tableau -
  • Publié le :  | Modifié le :

Conversion d'une série d'éléments dans un tableau, en utilisant Array.prototype.slice.call()

Une fonction JavaScript puissante qui permet de lister des objets dans un tableau. Afin d'éviter de réécrire du code, il suffit de parser le tableau dans une boucle, et d'appliquer les modifs via une fonction, avec la possibilité de passer des paramètres.

Illustration par l'exemple.

Il est courant que vous deviez lister une série d'éléments HTML dans votre JavaScript pour y appliquer des Listener. Puis de devoir faire référence à cette même liste d'éléments, pour y appliquer une nouvelle série d'actions ou de modifications. C'est là que la fonction Array.prototype.slice.call() est utile car elle permet de faire un tableau de ces éléments et surtout de les garder sous forme d'objets.

  1. <!-- Le code HTML -->
  2. <header id="pt-header">
  3.         <nav>
  4.                 <ul>
  5.                         <li><ahref="#"id="c0"class="vm-add">Action</a></li>
  6.                         <li><ahref="#"id="c1"class="vm-add">Animation</a></li>
  7.                         <li><ahref="#"id="c2"class="vm-add">Comédie</a></li>
  8.                         <li><ahref="#"id="c3"class="vm-add">Guerre</a></li>
  9.                         <li><ahref="#"id="c4"class="vm-add">Science-Fiction</a></li>
  10.                         <li><ahref="#"id="c5"class="vm-add">Western</a></li>
  11.                         <li><ahref="#"id="c6"class="vm-add">Drame</a></li>
  12.                         <li><ahref="#"id="c7"class="vm-add">Horreur</a></li>
  13.                         <li><ahref="#"id="c8"class="vm-add">Fantastique</a></li>
  14.                 </ul>
  15.         </nav>
  16. </header>
  17. <!-- Le reste du document HTML -->
  18. ...
  19. <scripttype="text/javascript">
  20. varBTN0=document.getElementById('c0');
  21. varBTN1=document.getElementById('c1');
  22. varBTN2=document.getElementById('c2');
  23. varBTN3=document.getElementById('c3');
  24. varBTN4=document.getElementById('c4');
  25. varBTN5=document.getElementById('c5');
  26. varBTN6=document.getElementById('c6');
  27. varBTN7=document.getElementById('c7');
  28. varBTN8=document.getElementById('c8');
  29. BTN0.addEventListener("click",change.bind(this,0),false);
  30. BTN1.addEventListener("click",change.bind(this,1),false);
  31. BTN2.addEventListener("click",change.bind(this,2),false);
  32. BTN3.addEventListener("click",change.bind(this,3),false);
  33. BTN4.addEventListener("click",change.bind(this,4),false);
  34. BTN5.addEventListener("click",change.bind(this,5),false);
  35. BTN6.addEventListener("click",change.bind(this,6),false);
  36. BTN7.addEventListener("click",change.bind(this,7),false);
  37. BTN8.addEventListener("click",change.bind(this,8),false);
  38. </script>
  39. </body>
  40. </html>

Se transforme en :

  1. <scripttype="text/javascript">
  2. vartete=document.getElementById('pt-header'),
  3. listSwitch=Array.prototype.slice.call(tete.querySelectorAll('nav > ul > li > a'));
  4. listSwitch.forEach(function(el,i){
  5.         el.addEventListener("click",  change.bind(this,i),false);
  6. });
  7. </script>

À noter el est l'élément sous forme d'objet, vous pouvez donc faire appel aux fonctions HTML DOM sur element object, comme el.getAttribute("id"); et modifier à l'envie les éléments ou faire passer des attributs comme le href ou des data-view dans la fonction du Listener.
i correspond à l'index dans le tableau.

Conclusion

Le code prend moins de place et nécessite moins de maintenance en cas de modification. Cependant il est fortement recommandé de bien commenter le code car après plusieurs semaines si vous y revenez il est moins évident de s'y retrouver.