Page 1 sur 1

caractère nul

Posté : 27 août 2005, 18:47
par arno. sans ses cookies
Bonjour,
j'aimerais bien savoir s'il est possible de définir un caractère nul en XML.
par exemple :

Code : Tout sélectionner

<span id="toto"></span>
je fais

Code : Tout sélectionner

 getElementById("toto").childNodes[0].nodeValue
et j'ai une erreur comme quoi childNodes[0] n'existe pas ; et moi j'aimerais bien ne pas avoir d'erreur quand mon span est vide est qu'il me renvoie la chaine vide.
Si je mets

Code : Tout sélectionner

<span id="toto">&null;</span>
&null; et

Code : Tout sélectionner

<!ENTITY null "">
, j'ai la même erreur.

Est-ce quelqu'un a une idée de comment je pourais faire ?
merci beaucoup

Posté : 28 août 2005, 13:23
par PsyDk
Sans texte dans le span, il n'y aura pas de nœud créé dans l'arbre du document. Il va donc te falloir créer le nœud texte dynamiquement s'il n'existe pas.

Code : Tout sélectionner

	var span = document.getElementById("toto");
	var nodeText = null;
	if( span.childNodes.length == 0)
	{
		nodeText = document.createTextNode("");
		span.appendChild(nodeText);
	}
	else
	{
		nodeText = span.childNodes[0];
		if( nodeText.nodeType != 3)
		{
			alert("Pas un nœud texte");
		}
	}
	
	nodeText.nodeValue = "blabla";
Tu peux même peut-être créer le span dynamiquement aussi.

Posté : 28 août 2005, 13:38
par arno.
c'est gross modo ce que j'avais fait. Mais je me demandais juste si il y avait un moyen de faire sans un test if( span.childNodes.length == 0)
(c'est que je suis un peu paresseux moi :roll: )

ben merci pour cette précision. :D

Posté : 28 août 2005, 13:49
par PsyDk
Je m'étais penché sur la question aussi ;) Sinon tu peux créer une fonction « GetTextNodeOrCreateItIfItDoesNotExist() » :mrgreen:

Posté : 28 août 2005, 14:13
par arno. sans ses cookies
PsyDk a écrit :GetTextNodeOrCreateItIfItDoesNotExist()
trop peur de m'embrouiller les doigts sur mon clavier :mrgreen:

Posté : 12 sept. 2005, 22:40
par Anubis
Bon le sujet est peut-être un peu vieux mais j'ai une solution. Il existe la propriété innerHTML en lecture et en écriture dans tous les nœuds HTML, celle-ci contient le code HTML situé à l'intérieur de la balise représentée par le nœud manipulé.

Code : Tout sélectionner

var plop0 = document.getElementById("plop0");
var plop1 = document.getElementById("plop1");

plop0.innerHTML = "Coucou les gens";
plop1.innerHTML = "Coucou les autres gens";
Ce code là fonctionne très bien chez moi sur Safari 2 et Firefox 1.5 avec le contenu HTML suivant :

Code : Tout sélectionner

<p><span id="plop0">Plop</span></p>
<p><span id="plop1"></span></p>

<p><input type="button" onclick="EnterTextInPlopSpans()" value="Test"/></p>
J'utilise généralement la propriété innerHTML pour manipuler ma page HTML car c'est très souvent plus simple que de manipuler l'arbre DOM.

Édition : PsyDk m'indique que si le document est servi correctement en XHTML (avec un type MIME application/xhtml+xml), alors cette technique ne fonctionne pas dans Firefox avant la version 1.5 et ne fonctionne pas du tout dans Safari.