CreateTextRange() ne marche pas sous firefox !!

Résolu
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 - 29 juin 2009 à 16:40
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 - 18 juil. 2009 à 18:31
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 .

10 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
29 juin 2009 à 16:45
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
3
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
29 juin 2009 à 21:56
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°
3
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 1
18 juil. 2009 à 18:31
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 +.
3
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 1
29 juin 2009 à 18:26
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 1
29 juin 2009 à 18:43
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
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
30 juin 2009 à 08:45
        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();
                     }
        }
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
30 juin 2009 à 08:58
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é");    }
                            }
                }
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
30 juin 2009 à 09:03
0
cs_romain117 Messages postés 53 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 21 juillet 2013 1
30 juin 2009 à 09:25
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
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
30 juin 2009 à 09:33
>>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
0
Rejoignez-nous