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

cs_romain117 53 Messages postés lundi 29 juin 2009Date d'inscription 21 juillet 2013 Dernière intervention - 29 juin 2009 à 16:40 - Dernière réponse : cs_romain117 53 Messages postés lundi 29 juin 2009Date d'inscription 21 juillet 2013 Dernière intervention
- 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 .
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 29 juin 2009 à 16:45
3
Merci
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

Merci Bul3 3

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Bul3
Meilleure réponse
kankrelune 1305 Messages postés mardi 9 novembre 2004Date d'inscription 21 mai 2015 Dernière intervention - 29 juin 2009 à 21:56
3
Merci
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°

Merci kankrelune 3

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de kankrelune
Meilleure réponse
cs_romain117 53 Messages postés lundi 29 juin 2009Date d'inscription 21 juillet 2013 Dernière intervention - 18 juil. 2009 à 18:31
3
Merci
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 +.

Merci cs_romain117 3

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_romain117
cs_romain117 53 Messages postés lundi 29 juin 2009Date d'inscription 21 juillet 2013 Dernière intervention - 29 juin 2009 à 18:26
0
Merci
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
Commenter la réponse de cs_romain117
cs_romain117 53 Messages postés lundi 29 juin 2009Date d'inscription 21 juillet 2013 Dernière intervention - 29 juin 2009 à 18:43
0
Merci
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
Commenter la réponse de cs_romain117
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 30 juin 2009 à 08:45
0
Merci
        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();
                     }
        }
Commenter la réponse de Bul3
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 30 juin 2009 à 08:58
0
Merci
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é");    }
                            }
                }
Commenter la réponse de Bul3
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 30 juin 2009 à 09:03
Commenter la réponse de Bul3
cs_romain117 53 Messages postés lundi 29 juin 2009Date d'inscription 21 juillet 2013 Dernière intervention - 30 juin 2009 à 09:25
0
Merci
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
Commenter la réponse de cs_romain117
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 30 juin 2009 à 09:33
0
Merci
>>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
Commenter la réponse de Bul3

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.