11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour, est-il possible, en javascript, de savoir si une balise est du genre:
- <balise> ...... </balise> ou bien
- <balise />
Salut,

Si la question est de faire la différence entre les éléments de type EMPTY (<link />, <img />, ...) et les autres, je ne crois pas que ce soit possible.

Dans quel but veux-tu faire cela ?
Le but, me permettre de refaire une fonction innerHTML...
car je n'aime pas cette propriété.

Le nombre d'enfants, ce n'est pas suffisant pour distinguer les deux types de balise. Il peut très bien avoir <p></p> qui n'a pas d'enfants
Modifié par Switche (30 Aug 2007 - 16:39)
Switche a écrit :
Le but, me permettre de refaire une fonction innerHTML...
car je n'aime pas cette propriété.

C'est-à-dire ? Tu veux faire une fonction qui fait exactement la même chose que innerHTML, juste parce que tu n'aimes pas cette propriété ? Smiley eek

Dans quel cadre vas-tu l'utiliser ?
Bah disons que innerHTML peut s'avérer dangereuse. J'ai déjà eu des problèmes importants avec ca. Maintenant j'utilise toujours la manipulation des noeuds plutot que innerHTML.

Je ne sais pas encore si je vais l'utiliser, deja il faudrait que cela marche...
Switche a écrit :
J'ai déjà eu des problèmes importants avec ca. Maintenant j'utilise toujours la manipulation des noeuds plutot que innerHTML.

Oui, mais le fait de passer par la manipulation des noeuds permet justement d'éviter de se poser la question qui est à la base de ce sujet. Smiley smile

Je précise que je ne cherche pas à t'ennuyer mais à essayer de comprendre ton besoin.
OK, alors voila un code source qui permettra de mieux comprendre mes besoins.

<html>
	<head><title>Test</title></head>
	<body>
	  <p id="paragraphe">
	    <em>Salut, <b>Ceci est un test</b>, on constate<br />que cela ne fonctionne pas correctement.</em>
    </p> 
	</body>
<html>


<script	language="javascript">
// Les types de noeud a utiliser en argument de la fonction analyseNodes().

var ALL_NODE      = -1;
var ELEMENT_NODE  =  1;
var TEXT_NODE     =  3;
  
  
// Parcours le contenu d'un noeud et applique une fonction a chacun des fils.
// Il est possible de passer un argument en option a cette fonction.
// 'type_node' est le type de noeud sur lequel la fonction est lancee (ELEMENT_NODE/TEXT_NODE/ALL_NODE). 

function analyseNodes(start_node,type_node,before_function,after_function,arg)
{ 
  var node,bool;
  for (var i=0;i<start_node.childNodes.length;i++) 
  { 
    node = start_node.childNodes[i];
    bool = (type_node == ALL_NODE  || node.nodeType == type_node);
    
    if (bool && before_function) before_function(node,arg);
    if (node.nodeType == ELEMENT_NODE)  
      analyseNodes(node,type_node,before_function,after_function,arg);
    if (bool && after_function) after_function(node,arg);
  }
}


// Recupere le texte contenu dans un noeud ainsi que tous ses fils.
                  
function getNodeHtml(node)
{
  var struct = new Object();
  var extract2 = function (node,struct){ if (node.nodeType == ELEMENT_NODE) struct.text += '</' + node.nodeName + '>'; }
  var extract  = function (node,struct)
  { 
    if (node.nodeType == ELEMENT_NODE) struct.text += '<' + node.nodeName + '>';
    if (node.nodeType == TEXT_NODE) struct.text += node.nodeValue;
  }
  struct.text = '';
  analyseNodes(node,ALL_NODE,extract,extract2,struct);
  return struct.text;
}

alert(getNodeHtml(document.getElementById('paragraphe'))); </script>



On constate qu'au niveau de la balise BR, il y a un souci[/i]