Javascript pour Firefox : Rechercher et Remplacer un Mot dans une Page Web [Résolu]

Messages postés
18
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 décembre 2008
- - Dernière réponse : Grobabar
Messages postés
18
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 décembre 2008
- 5 déc. 2008 à 11:31
Bonjour !

J'ai un code Javascript permettant à IE de Rechercher un Mot dans une Page Web.
Cependant, mon code ne fonctionne pas sous firefox : le bouton de recherche ne répond pas.
Je sais qu'ici vous etes extremement qualifies sur ces questions de compatibilites, alors j'aimerais vous soumettre mon script qui fonctionne parfaitement sous IE, et obtenir votre point de vue sur ce qui peut faire obstacle.
Comme je suis novice avec Javascript, je laisse passer pas mal de coquilles. Mais j'ai vraiment envie de progresser.

Par la suite j'aimerais également effectuer un remplacement automatique sur le document du mot recherché par un mot fixe, prévu dans le code.

Je vous remercie d'avance pour votre aide !

Voici le code pret à fonctionner :

<html>

<head></head>
<!-- UNE  ETAPE  D'INSTALLER  Rechercher un mot sur une page web    -->
<!-- ETAPE 1 : Placer le code suivant entre les balises ...  -->
<script language="JavaScript">

var NS4 = (document.layers);   
var IE4 = (document.all);

var win = window;   
var n   = 0;

function findInPage(str) {

  var txt, i, found;

  if (str == "")
    return false;

  //
  // Commencer.

  if (NS4) {

    //
    //

    if (!win.find(str))
      while(win.find(str, false, true))
        n++;
    else
      n++;

    //

    if (n == 0)
      alert("Not found.");
  }

  if (IE4) {
    txt = win.document.body.createTextRange();

    //

    for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
      txt.moveStart("character", 1);
      txt.moveEnd("textedit");
    }

    //

    if (found) {
      txt.moveStart("character", -1);
      txt.findText(str);
      txt.select();
      txt.scrollIntoView();
//
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
//
// C'est ici que je bloque pour changer le mot recherché par "Vaches"
//
// document[i].value = "Vaches";
//
//
//
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
      n++;
    }

    //

    else {
      if (n > 0) {
        n = 0;
        findInPage(str);
      }

      //

      else
        alert("Pas trouver.");
    }
  }

  return false;
}

</script>

<form name="search" onSubmit="return findInPage(this.string.value);">

</form>
<textarea NAME="zone" ROWS="25" COLS="100">
Bonjour ! Voici ma phrase de test.

Prochaine etape :

Remplacer toutes les occurences de "Moutons" par des "Vaches" :

Moutons

Moutons

Moutons

</textarea>

</html>
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
3
Merci
faut d'abord que tu respectes la syntaxe requise :
par exemple : document.getElementById("txtI") reg=new RegExp("(mouton)", "gi");
ça ne "correspond à rien", ça donne d'ailleurs une erreur dans les navigateurs

    <script>

        function Remplace( origine, chercher, remplacement, resultat )

        {    return ( origine.replace( new RegExp( chercher, "gi"), remplacement ) );    }

    </script>

    <form name="frm">

        <textarea name="txt" cols="72" rows="8">Saisissez ici votre texte</textarea>

        Rechercher __ :

        Remplacer par : &nbsp;

       

    </form>

          [mon Site] [M'écrire] Bul         

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 194 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
bonjour,
si j'étais toi je regarderais plus simplement du coté de replace...
    var reg = new RegExp( a_chercher, "gi") ;
    resultat = origine.replace( reg, remplacer_par ) ;
Cordialement          [mon Site]  [M'écrire] Bul         
Commenter la réponse de Bul3
Messages postés
18
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 décembre 2008
0
Merci
Ok, si je comprends bien tu me conseilles de recommencer à zero avec 2 fonctions à créer :
a_chercher()
remplacer_par()

Puis je utiliser findInPage() de mon script a la place de a_chercher() ?
Est-ce que ce sera compatible Firefox ?

Dois-je coder une fonction remplacer_par() ?

Je ne connaissais pas RegExp(), j'ai fait qqes recherches et compris que ça permet de traiter du contenu en dynamique.

Voilà la forme que j'aimerais que ça prenne :
Comment dois-je faire pour faire fonctionner remplacer_par ? replace() ? j'avoue que je suis un peu perdu.

<html><head><title>Test</title><script type= "text/javascript">
<!--
function edit(valeur)
{
 var reg = new RegExp( a_chercher, "e") ;
 resultat = origine.replace( reg, remplacer_par ) ;
}
//--></script></head><form action ="">

</form></html>
Commenter la réponse de Grobabar
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
euh...  je t'ai mis une "syntaxe générale"

si on prend dans ton 2ème exemple "remplacer tous les E par des A"

a_chercher       : ce sont les caractères, les mots... à rechercher
                         "E" à priori ?
resultat           : c'est le texte après remplacement
                         les "E" auront été remplacé par "A"
                         tu n'as rien mis dans ton 2ème exemple
                         dans ton 1er, ce serait la même zone que celle d'origine,
                         textarea NAME="zone" peut-être ?
origine             : c'est le texte tel qu'il est/existe à l'origine
                        je ne vois pas ce champ dans ce que tu postes en dernier,
                        dans ton 1er exemple, c'était ton textarea NAME="zone" non ?
remplacer_par  : c'est ce par quoi il faut remplacer ce qu'on à cherché
                        "A" donc pour toi probablement.

dans var reg = new RegExp( a_chercher, "e") ;
le 2ème paramètre ne correspond pas à la syntaxe prévue
mon exemple était :  "gi"
g = pour faire sur tous les caractères
i = pour ignorer les majuscules/minuscules
c'est a_chercher qui doit (?) être = "E" ( ou "e" )

si je te donne directement la solution,
    ça ne t'apporterait pas grand chose,
    tu as tout pour faire normalement...

          [mon Site] [M'écrire] Bul         
Commenter la réponse de Bul3
Messages postés
18
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 décembre 2008
0
Merci
MERCI !!

Alors voici ce que j'en apprend :

var reg = new RegExp( "Moutons", "gi") ;
Le M majuscule de moutons est inutile puisque j'ai ensuite les paramètres "gi".
G concerne des caractères mais est compatible pour traiter le mot concerné.

RegExp  est une fonction javascript qui cherche dans le document.

Il y a une différence entre :
var reg = new RegExp( "Moutons", "gi") ;
ou : var reg = new RegExp( "(Moutons)", "gi") ;

On obtient reg qui est le mot trouvé et on l'envoie dans replace pour obtenir des "Vaches". Où Resultat est le texte et replace traite tous les moutons d'un coup.

zone est le nom de ma zone de saisie où je colle le texte à traiter.
resultat = zone.replace( reg, "Vaches" ) ;
Faudrait-il dire ?
document.zone.value = document.zone.replace.value( reg, "Vaches" ) ;

-----------------------------------------------------------------------------

Maintenant je sais le faire en partant d'une var="Mon histoire de moutons".
J'aimerais appliquer ces connaissances à un bouton d'envoi affectant une "zone1" qui reçoit et "zone2" qui restitue le résultat.  (2 texta area)

Ce qu'il me manque c'est comment remplacer mon :
var =" mon texte " ;
Par une syntaxte compatible firefox :
document.etc...récupérer...dans"zone".value, du genre :
var=document.getElementById('zone1');

ainsi que ;
document.etc...write...dans"zone2"

Sauf erreur de ma part, le code bouton sera :
<form name="search" onSubmit="return nom_de_la_fonction(this.string.value);">

Cet aspect là ne m'est pas intuitif du tout,   toute aide serait bienvenue !
Commenter la réponse de Grobabar
Messages postés
18
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 décembre 2008
0
Merci
J'ai essayé d'aller aussi loin que je pouvais de mon côté.
J'ai encore quelques fautes persistantes que je n'arrive pas à corriger.
Je pars sur la base du script que tu m'as donné :
   var reg = new RegExp( a_chercher, "gi") ;
    resultat = origine.replace( reg, remplacer_par ) ;

Je l'utilise dans une page firefox qui a une zone de saisie, un bouton d'action et une div de résultat. En voici le code :

<html><head><title>Test</title><script type="text/javascript"><!--
function edit(texte){
document.getElementById("txtI") reg=new RegExp("(mouton)", "gi");
document.getElementById("resultat").innerHTML=chaine.replace(reg,"Vache") + "
");
} //--></script></head>
<form name="frm">
 

 
</form>

</html>

Comme je le disais dans mon sujet précédent, je butte sur les notions de pointage pour appeler une zone et écrire dans le div. J'ai essayé de fair eles deux actions chercher remplacer en une seule ligne de code mais ça ne me semble pas possible. Si ça l'était j'aurais pu  éviter d'utiliser la VAR qui bloque mon code. Quoi qu'il en soit j'y suis presque, il me faudrait juste un coup de pouce pour le pointage et le début de ma fonction qui se cherche encore...

Merci pour votre soutien !
Commenter la réponse de Grobabar
Messages postés
18
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 décembre 2008
0
Merci
Mince je viens de me dire que :
document.getElementById("txtI") reg=new RegExp("(mouton)", "gi");
Devrait être qc du genre :
var reg = new RegExp("(mouton)", "gi");
Avec un "document.frm.txtN.value" ou "document.getElementById("txtI")" quelque part qui permette au script de comprendre qu'il doit traiter l'input de saisie, n'est-ce pas ?
J'aimerais avoir la visibilité là dessus !! c'est énervant de bloquer sur des notions aussi élémentaires !
Commenter la réponse de Grobabar
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
il faut lire :         function Remplace( origine, chercher, remplacement )
          [mon Site] [M'écrire] Bul 
Commenter la réponse de Bul3
Messages postés
18
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 décembre 2008
0
Merci
Bul3, je te dis un grand merci !
La fonction est excellente, je comprends de mieux en mieux le fonctionnement de javascript, c'est vraiment très intéressant et ça donne envie de continuer.
Merci d'avoir pris le temps de me proposer cette solution, j'avais beaucoup cherché et je partais dans des analyses trop compliquées.
Ton script marche parfaitement ! Merci !
Commenter la réponse de Grobabar