Comment accéder aux attributs d'une balise en DOM

Les attributs d'une balise

Avant de continuer la manipulation d'un document XHTML à l'aide du DOM, il est utile de définir les méthodes et les propriétés du DOM associées aux attributs d'une balise XHTML.

attributes

C'est la méthode par défaut pour accéder aux attributs. attributes permet de récupérer un tableau ou array des noms et des valeurs de chaque balise qui sont spécifiés dans un document donné.

Si attributes est à première vue utile, son utilisation doit être faite en tenant compte de son implémentation diffèrente dans Internet Explorer. attributes dans IE nous renoie la liste complète de tous les attributs suceptibles d'être utilisés par une balise. Néanmoins pour utilisér attributes dans IE et dans les autres navigateurs une astuce a été trouvée...

les expressions suivantes indiquent pour node
node.attributes.length  -> le nombre total 
                            d'attributs assignés 
                           sauf pour IE
node.attributes[i].name -> le nom de son attribut i+1
node.attributes[i].value -> la valeur de son attribut i+1
node.attributes[i].specified -> si l'attribut i+1 a été 
                                spécifié par l'utilisateur
                                ou non

Pour contourner la spécificité d'IE, on va utiliser la propriété specified de attributes. Au lieu d'écrire le script suivant :

function example7(nodeId){
  var node = document.getElementById(nodeId);
  alert(node.attributes.length); 
}
ceci fonctionne par tout SAUF dans IE

qui nous donne un résultat différent pour IE d'un côté et les autres navigateurs de l'autre. On aura :

function example7bis(nodeId){
  var node = document.getElementById(nodeId);
	var nodeAttributesLength = 0;
  for(var i = 0; i <node.attributes.length; i++){
	 if(node.attributes[i].specified) {
	   nodeAttributesLength++;
   }
	} 
	alert(nodeAttributesLength);
}
ceci fonctionne par tout SAUF dans IE

qui nous donne un résultat identique quelque soit le navigateur.

Comme l'on est généralement plus intéressé par un attribut à la fois, le DOM met à notre disposition 3 méthodes complémentaires pour accéder et modifier un attribut quelconque d'une balise.

getAttribute

getAttribute permet de récupérer un attribut spécifique d'un node de type balise. Si cette attribut n'existe pas, il retourne null.

node.getAttribute(attributeName);

setAttribute

La méthode setAttribute permet de modifier un attribut spécifique d'un node de type balise. Si cette attribut n'existe pas, il le crée.

node.setAttribute(attributeName,attributeValue);

removeAttribute

Enfin, la méthode removeAttribute permet de retirer un attribut spécifique d'un balise.

node.removeAttribute(attributeName);

Ainsi nous avons 3 méthodes complémentaires pour pouvoir jongler avec les attributs des balises en XHTML.

Exemples

A l'aide de la fonction décrite ci-dessous nous pouvons altérer un noeud et en 3 étapes assigner, changer et enlever un attribut class à celui-ci.

function example8(nodeId){
  var node = document.getElementById(nodeId);
  if(!node.getAttribute("class")) {
    node.setAttribute("class","part");
  }
  else if(node.getAttribute("class") == "part") {
    node.setAttribute("class","toto");
  }
  else if(node.getAttribute("class") == "toto"){ 
    node.removeAttribute("class");
  }
}
// pour une meilleur visibilité les commandes alert on été 
   supprimées