méthode getElementById() : vraiment utile ?

méthode getElementById() : vraiment utile ? - HTML/CSS - Programmation

Marsh Posté le 04-12-2006 à 17:54:58    

bonjour
 
J'ai vu que pour accéder à un élement HTML via le DOM, en Javascript
il ya 2 facons :
- document.getElementById('IdElement').innerHTML (par ex)
- IdElement.innerHTML
 
dans ce cas, quel est l'intéret de passer par la méthode getElementById() si on peut y accéder directement par son id (sous réserver que l'id soit unique dans l'arbre (ce qui est censé etre le cas) ) ?
 
Je pensais que c'etait une question de compatibiltié inter navigateurs, mais les 2 facon marchent aussi bien sous IE que FF (mais j'ai pas essayé sur d'autres)

Reply

Marsh Posté le 04-12-2006 à 17:54:58   

Reply

Marsh Posté le 04-12-2006 à 18:24:39    

getElementById te permet de récupérer une valeur ou un contenu et donc de faire un traitement.

Reply

Marsh Posté le 04-12-2006 à 18:40:29    

la deuxième c'est pas du DOM [:spamafote]
Je pense que c'est un vieu relent de la methode oldSch00lz d'accès aux éléments d'une page HTML.
edit: par ailleurs getElementById te renvoie un objet de type node element, et l'autre ... euh ... j'en sais rien [:cupra]


Message édité par anapajari le 04-12-2006 à 18:41:17
Reply

Marsh Posté le 04-12-2006 à 19:36:13    

jokari34 a écrit :

dans ce cas, quel est l'intéret de passer par la méthode getElementById() si on peut y accéder directement par son id


Lapin compris. getElementById permet justement d'accéder à un élément par son id. Tout autre méthode n'est pas standard. On pourra aussi utiliser un alias, genre la fonction $ de prototype pour plus de légèreté

Reply

Marsh Posté le 05-12-2006 à 04:31:06    

FlorentG a écrit :

Lapin compris. getElementById permet justement d'accéder à un élément par son id. Tout autre méthode n'est pas standard. On pourra aussi utiliser un alias, genre la fonction $ de prototype pour plus de légèreté


Juste un petit conseil en passant.
Lorsque vous êtes amenés à faire pas mal de JS, je ne pense pas trop utile d'utiliser tout de suite une lib, mais plutôt les parties d'une lib. Où le mieux c'est d'avoir un jeu de helpers fonctions sous la main, qui font gagner du temps pour l'écriture du code.
 
parmis ces fonctions pas mal sont tirées de quirksmode. Je ne le cache pas, on va pas réinventer la roue.

Code :
  1. //Add Events
  2. function addEvent( obj, type, fn ) {
  3. if (obj.addEventListener)
  4.  obj.addEventListener( type, fn, false );
  5. else if (obj.attachEvent) {
  6.  obj["e"+type+fn] = fn;
  7.  obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
  8.  obj.attachEvent( "on"+type, obj[type+fn] );
  9. }
  10. }
  11. /* $: shortcut for document.getElementById*/
  12. function $(obj) {
  13. if(typeof obj == "string" ) {
  14.  return document.getElementById(obj);
  15. } else {
  16.  return obj;
  17. }
  18. }
  19. /*getElementsByClassName: return an array of Objects with specified className*/
  20. function getElementsByClassName(oElm, sTagName, sClassName){
  21.     var aElements = (sTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(sTagName);
  22. var aReturnElements = new Array();
  23.     sClassName = sClassName.replace(/\-/g, "\\-" );
  24. var oRegExp = new RegExp("(^|\\s)" + sClassName + "(\\s|$)" );
  25. var oElement;
  26. for(var i=0; i < aElements.length; i++){
  27.      oElement = aElements[i];
  28.  if(oRegExp.test(oElement.className))
  29.             aReturnElements.push(oElement);
  30.     }
  31. return aReturnElements
  32. }
  33. /*findPos: return position of an element*/
  34. function findPos(obj) {
  35. var curleft = curtop = 0;
  36. if (obj.offsetParent) {
  37.  curleft = obj.offsetLeft
  38.  curtop = obj.offsetTop
  39.  while (obj = obj.offsetParent) {
  40.   curleft += obj.offsetLeft
  41.   curtop += obj.offsetTop
  42.  }
  43. }
  44. return [curleft,curtop];
  45. }
  46. // getStyle : retourne la valeur d'une propriété CSS appliquée à un élément
  47. function getStyle(oElm, strCssRule){
  48.     var strValue = "";
  49.     if(document.defaultView && document.defaultView.getComputedStyle) {
  50.  try{ strValue = document.defaultView.getComputedStyle(oElm, "" ).getPropertyValue(strCssRule); }
  51.  catch(e) { strValue = ""; }
  52.     }
  53.     else if(oElm.currentStyle) {
  54.         try{
  55.   strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
  56.             return p1.toUpperCase();
  57.         });
  58.         strValue = oElm.currentStyle[strCssRule];
  59.  } catch(e) {
  60.   strValue = "";
  61.  }
  62.     }
  63.     return strValue;
  64. }
  65. /*retourne la valeur entière d'un style*/
  66. function intStyle(oElm, strCSSRule) {
  67. var val = parseInt(getStyle(oElm, strCSSRule));
  68. if (isNaN(val)) val=0;
  69. return val;
  70. }
  71. /* getText: retourne le contenu texte d'un élément */
  72. function getText(elm) {
  73. if (elm.innerText) {
  74.  return elm.innerText;
  75. } else {
  76.  return elm.textContent;
  77. }
  78. }

Reply

Marsh Posté le 05-12-2006 à 09:52:27    

Ton addEvent risque de leaker, non ? L'avantage de frameworks comme prototype ou Yahoo! UI, c'est qu'ils nettoient tous les events à la fermeture de la page, à méditer.
 
Sinon pour getElementByClassName, je serais partant de la renommer en quelque chose de plus court (on pourrait avoir $id('pouet') et $class('tagada') par exemple)

Reply

Marsh Posté le 05-12-2006 à 11:36:55    

pas bête chérie, pas bete :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed