Remplacer le innertext/textcontent sans supprimer les balises

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 986 fois - Téléchargée 16 fois

Contenu du snippet

Bonjour,

Cette petite source anodine permet de remplacer un caractère par un autre dans une chaîne. Par contre, la fonction ne remplacera pas la lettre si elle est dans une balise.

Exemple : Je veux remplacer / par \ dans la chaîne suivante:

<span>Tes/t</span>

Une fonction ordinaire aurait retourné

<span>Tes\t<\span>

Cette fonction retournera quant à elle :

<span>Tes\t</span>
<span>Tes/t</span>

Source / Exemple :


<script type="text/javascript">
function replace_innerHTML(tn,ty,ts){

can1=true;
can2=true;

for(var i=0;i<tn.length;i++){
tv=tn.charAt(i);

if(tv=="<"){
can1=false;
}
else if(tv=='"' && can2 && !can1){

can2=false;

}
else if(tv=='"' && !can2 && tn.charAt(i-1)!="\\" && !can1){
can2=true;

}
else if(tv=='>' && !can1 && can2){
can1=true;

}

if(tv==ty && can1){
yn=new Array();
for(var j=0;j<tn.length;j++){

yn.push(tn.charAt(j))

}

yn[i]=ts;
tn=yn.join("");
}
}

return tn;
}
</script>
<div onclick="alert(replace_innerHTML(this.innerHTML,'/','\\'))"><span>Tes/t</span></div>

Conclusion :


Source sans prétention mais ennuyante et longue à imaginer/coder

Rendez-vous sur mon blog pour plus d'information sur mes prochaines sources

A voir également

Ajouter un commentaire

Commentaires

cs_era
Messages postés
77
Date d'inscription
lundi 6 mai 2002
Statut
Membre
Dernière intervention
4 mai 2011
-
bonne idee
MAIS
je comprends pas une tel source
il existe pas une fonction en js : document.getElementById(id).innerHTML = "mon nouveau text"
jdmcreator
Messages postés
656
Date d'inscription
samedi 30 décembre 2000
Statut
Membre
Dernière intervention
20 juillet 2012
3 -
En fait, cette fonction ne sert pas à modifier le innerHTML mais à remplacer un caractère par un autre mais en s'assurant qu'il ne fait pas parti d'une balise.

Dans le projet où j'utilise la fonction, je dois remplacer tous les barres obliques (/) par des symboles de division. Seulement, la fonction replace de String, aurait remplacé même les barres obliques de la fermeture de la balise SPAN. Et si j'aurais utilisé document.getElementById(id).innerText, cela aurait effacé toutes les balises.

+ d'info sur le projet ici sur mon blog : http://jdmcreator.110mb.com/blog/index.php?entry=entry100423-020321)
cs_era
Messages postés
77
Date d'inscription
lundi 6 mai 2002
Statut
Membre
Dernière intervention
4 mai 2011
-
oui je comprends bien ton probleme
mais pour un code plus propre j aurais fait ca:

algo;

Dans toutes les balises rencontre (fonction recursive)
je recupere le contenu si c est une balise je relance sinon je remplace

ton code est bon mais lourd a mettre en place....

c est juste pour faire avance le schmilblick
jdmcreator
Messages postés
656
Date d'inscription
samedi 30 décembre 2000
Statut
Membre
Dernière intervention
20 juillet 2012
3 -
Mouais... avec détection des noeuds de Type Text... peut-être que cela se ferait ;)
jdmcreator
Messages postés
656
Date d'inscription
samedi 30 décembre 2000
Statut
Membre
Dernière intervention
20 juillet 2012
3 -
Bonjour,

J'ai essayé mais c'est presque 2 fois moins rapide que ma technique :/ déjà que je trouve ma méthode peu rapide... Tu pourrais tu me montrer ce que tu veux dire ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.