CreateTextRange() ne marche pas sous firefox !! [Résolu]

Signaler
Messages postés
53
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
21 juillet 2013
-
Messages postés
53
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
21 juillet 2013
-
Bonjour,

J'utilise une fonction Javascript qui permet de colorer les mots cherchés (lorsque l'on se trouve sur la page de recherche).

J'utilise la fonction javascript
window.document.body.createTextRange() qui permet d'isoler chaque mot
de la page pour pouvoir les traiter un à un ensuite. Le problème est
que ce n'est y pas reconnu par firefox, seulement par internet explorer
:( !!!

Apparemment cette fonction provient de la bibliothèque msdn donc c'est normal que ca ne marche que sous IE .

Connaissez-vous la fonction que je peux utiliser pour que mon script marche sous firefox ??

Autre problème. La coloration s'effectue partout sur la page (dans
le body en fait). Or je voudrais pouvoir définir une zone de
coloration. Comment faire ?

Pour le moment l'appel de ma fonction est dans le body :

Voici ma fonction si ca peut aider :

//colore le ou les mots cherchés dans la zone de recherche

function onload(chaine)

{

var mot=chaine.split(" ");//on coupe les mots si la recherche comprend plusieurs mots

var i=0;

while (typeof(mot[i]) != "undefined" )//pour chacun des mots recherchés

{

var motrecherche = window.document.body.createTextRange();//chaque
mot est "mis" dans une cellule pour pouvoir travailler dessus ensuite

while(motrecherche.findText(mot[i])!=false) //tant qu'il y a des occurences du mot cherché

{

//alert ("mot : " + motrecherche.findText(chaine));

motrecherche.findText(mot[i]);//on se place a la premiere ou a la prochaine occurence

motrecherche.moveStart("character",0);//selection du mot a partir du debut...

motrecherche.findText(mot[i]);//...jusqu'à la fin

motrecherche.pasteHTML(""+mot[i]+"");//...on colore le mot en rouge

}

i++;

}

}

Merci d'avance à tous ceux qui pourront m'aider .
A voir également:

10 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
Bonjour,
regarde du coté des sources postées par petoleTeam,
de mémoire d'Alzheimer, il y a ce qu'il faut.
sinon... on te mettra ici ce qui convient.
Cordialement
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Slt... alors déja createTextRange() n'est pas spécifique à window.document.body

http://msdn.microsoft.com/en-us/library/ms536401(VS.85).aspx

pour le reste pas le temps de regarder.. essaye ça

http://eriwen.com/javascript/highlight-search-results-with-js/

mais ça a l'air un peu lourd pour ce que c'est... .. .

@ tchaOo°
Messages postés
53
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
21 juillet 2013

Rebonjour.

J'avais (un peu) laissé tomber ce problème puis finalement, comme c'est important pour mon site, je m'y suis replongé !

Finalement j'ai trouvé la solution en reprenant le code proposé par kankrelune un peu plus haut à l'adresse http://eriwen.com/javascript/highlight-search-results-with-js/

Ce qu'il faut savoir sur ce code :
1 / il est appelé automatiquement à chaque chargement de la page pour peu que l'on ait inclus notre fichier js
2 / il récupère le mot cherché dans l'url : le mot (ou les mots) sont des parametres qui se trouvent apres "&s="
3 / il fait appel à un fichier css (inclus dans la source) qu'il faudra appeler en plus du script js

Voilà si ca peut en intéresser certains allez sur cette page ca marche !! (le regex ne marche pas si bien que ca mais j'y travaille...)


Merci kankrelune !!


A +.
Messages postés
53
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
21 juillet 2013

Re bonjour.

Merci d'avoir répondu si vite.

Je n'ai pas trouvé pour le code source de petroleTeam (y a-t-il moyen de faire une recherche par auteur??)

En revanche j'ai trouvé ce lien sur le site : http://www.javascriptfr.com/codes/RECHERCHER-REMPLACER-MOT-DANS-TEXTE_44499.aspx

Ca pourrait résoudre un de mes deux problèmes (je dit "pourrait" car pour l'instant j'arrive pas à accéder au fichier zip ).

Je vous tient au courant !

Vive les forums !
Romain
Messages postés
53
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
21 juillet 2013

Ah ben non !
Je me suis trompé !

Le lien donné ci-dessus ne marche que pour IE et Opéra ! Pas de chance...

J'attends vos suggestions

Vive les forums !
Romain
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
        function cherche(quoi)        {   var ie false;    /*@cc_on    ie true;    @*/
            if ( !ie )
                     {  window.find(quoi,false,false);    }
            else    {  var txt = window.document.body.createTextRange();
                        txt.findText(quoi,0);
                        txt.select();
                     }
        }
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
pour IE en mieux ( le 1er exemple ne surlignait que le 1er  trouvé !
mauvais copié/collé .... )

function findInPage(str)
                {    txt = window.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();
                                n++;
                            }
                    else    {    if (n > 0)
                                         {   n = 0;
                                            findInPage(str);
                                         }
                                else    {  alert("pas trouvé");    }
                            }
                }
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
Messages postés
53
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
21 juillet 2013

Salut !

Bul3, le code que tu proposes, est-ce qu'il marche seulement pour IE ou c'est aussi pour firefox ?? est-ce que c'est window.find() qu'il faut utiliser pour firefox ??

Ok merci pour le lien de petroleTeam je vais voir ca.

Et merci kankrelune aussi pour ton lien. ca a l'air un peu lourd en effet mais enfin bon, si ca marche...

Moi je dis elle était quand même bien cette fonction createTextRange(), simple et puissante.Même si évidemment, c'est du Microsoft :p
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
>>le code que tu proposes, est-ce qu'il marche seulement pour IE ou c'est
aussi pour firefox ??
exclusif IE
>> est-ce que c'est window.find() qu'il faut
utiliser pour firefox
oui