Bonjour,

j'ai une balise HTML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<span id='idMaBalise'></span>
En fonction de ce que l'utilisateur tape dans une balise input, cette balise span est modifiée.

Le problème c'est que si la balise est vide, le code suivant ne fonctionne pas que ce soit sous IE, FireFox ou Chrome (sinon ça fonctionne) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
function remplacerContenu(idDomObjet, contenu) {
    var donnees = document.getElementById(idDomObjet).firstChild ;
    // La balise a une donnees et c'est la balise d'origine du HTML
    var longueurDonnees = donnees.length ;
 
    donnees.replaceData(0, longueurDonnees, contenu) ;
}
donc j'ai complèté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function remplacerContenu(idDomObjet, contenu) {
    var donnees = document.getElementById(idDomObjet).firstChild ;
 
    // Si la balise est vide donnees est undefined
    if (donnees) {
        // La balise a une donnees et c'est la balise d'origine du HTML
        var longueurDonnees = donnees.length ;
 
        donnees.replaceData(0, longueurDonnees, contenu) ;
    } else {
        // Creer un nouveau noeud
        var nouveauFils = document.createElement('span') ;
 
        var nouveauTexte = document.createTextNode(contenu) ;
 
        nouveauFils.appendChild(nouveauTexte) ;
 
        document.getElementById(idDomObjet).replaceChild(nouveauFils, donnees) ;
    }
}
Ca marche à la première modification, mais à la deuxième non, car donnees length est null.
En effet, j'ai remarqué que si la n'est pas vide la première fois on a la propriété length.
si on créer des balise dynamiquement on a pas length
Donc, j'ai ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function remplacerContenu(idDomObjet, contenu) {
    var donnees = document.getElementById(idDomObjet).firstChild ;   
 
    // Si la balise est vide donnees est undefined
    if (donnees && donnees.length) {
        // La balise a une donnees et c'est la balise d'origine du HTML
        var longueurDonnees = donnees.length ;
 
        donnees.replaceData(0, longueurDonnees, contenu) ;
    } else {
        // Creer un nouveau noeud
        var nouveauFils = document.createElement('span') ;
 
        var nouveauTexte = document.createTextNode(contenu) ;
 
        nouveauFils.appendChild(nouveauTexte) ;
 
        // Si donnees != undefined c'est qu'on a deja cree le noeud
        if (donnees) {
            document.getElementById(idDomObjet).replaceChild(nouveauFils, donnees) ;
        } else {
            document.getElementById(idDomObjet).appendChild(nouveauFils) ;
        }
    }
}
Ma question est pourquoi on a pas length et pourquoi si on modifie la propriété nodeValue, ça ne fonctionne pas non plus ?

Merci