Probleme dans ma fonction Rechercher Remplacer

Signaler
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
-
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
-
Jarod_Delaware

17 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
Bonjour,            c'est très concis...
<hr />


Cordialement                Bul    
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
, y a du avoir une erreur lorsque j'ai posté mon message, y a plus rien.

Jarod_Delaware
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Voilà, je reposte mon problème. Je suis en train de faire un fonctionnalité permettant à l'utilisateur de rechercher et de remplacer un texte présent dans la fenêtre principale par le biais d'une popup. Le problème est que, lorsque je rentre une valeur, il ne trouve pas le texte.

J'ai essayé de remplacer la ligne :
var txt = window.document.body.createTextRange();

par :

var txt = window.opener.document.body.createTextRange();

Mais ça me génère une erreur dans ma alert box du type [object].

Si quelqu'un à une idée de ce qui ne va pas dans mon code.
Merci.

Voici ma fonction :

function finder (xkey) {
 var params = 0;


 if ( document.frm.str1.value.length == 0 ) return;
 var elm = document.frm.str1.value;
 var rpl = document.frm.str2.value;


 var txt = window.document.body.createTextRange();


 if ( document.frm.match1.checked ) params += document.frm.match1.value*1;
 if ( document.frm.match2.checked ) params += document.frm.match2.value*1;


 i = 0;
 while ( txt.findText(elm, 1000000, params) && i++ < 20000 ) {
  txt.select ();
  txt.pasteHTML (rpl);
  txt.collapse(false);
  alert(txt);
 }
 alert (i+' Trouvé(s) replacé(s)');
}

Jarod_Delaware
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>remplacer un texte présent dans la fenêtre principale par le biais d'une popup
        window.opener.document.selection.createRange().text)

    ( exclusif IE n'est-il pas ! )
<hr />


Cordialement                Bul    
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Jarod_Delaware
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Salut,

J'ai testé la ligne que tu m'as mis :
var txt = window.opener.document.selection.createRange().text;
ça ne marche pas. Ca me génère une erreur :
Cet objet ne gère pas cette propriété ou cette méthode.

J'ai également essayé de mettre :
var txt = window.opener.document.body.createTextRange(); et j'ai comme erreur :
Impossible d'effectuer cette opération à cause de l'erreur suivante 800a025e.

window.opener ça me semblait logique mais bon ça ne marche pas. Du coups, je suis un peu perdu.

Jarod_Delaware
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
"chez moi" : pas de soucis... ( avec IE )

    page mère :

<html>

Beaucoup de texte à sélectionner

Beaucoup de texte à sélectionner

Beaucoup de texte à sélectionner

Beaucoup de texte à sélectionner

<form>
<textarea rows=8 cols=50>
du texte à sélectionner


du texte à sélectionner

du texte à sélectionner

du texte à sélectionner



</textarea>

<script type="text/javascript">
    window.open("pop.htm");
</script>

</html>



    pop-up :




<html>
<head>
<title>Texte sélectionné</title>
<script type="text/javascript">
function txtsel()
{    alert("sélection="+window.opener.document.selection.createRange().text);    }
</script>
</head>

</form>

</html>


    tester et nous dire....
    ton erreur est ailleurs ?

<hr />


Cordialement                Bul    
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Oui ton script marche impec chez moi aussi. Je comprend qu'est ce qui coince dans ma fonction de rechercher/remplacer.
Là je sèche litteralement.

Jarod_Delaware
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
je n'ai pas regardé le reste de ta fonction et on n'a pas tout l'environnement...
si tu fais alert(

window.opener.document.selection.createRange().text);
c'est bon ou pas  ?
je te disais que ton erreur était probablement ailleurs...



<hr />



Cordialement                Bul    
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Oui la méthode alert m'affiche bien le texte sélectionné. Je pense que l'erreur doit se situer dans la boucle :
i = 0;
 while ( txt.findText(elm, 1000000, params) && i++ < 20000 ) {
  txt.select ();
  txt.pasteHTML (rpl);
  txt.collapse(false);  
 }
Je sais pas si c'est compatible avec la ligne :
 var txt = window.opener.document.selection.createRange().text;

Parce ce que au départ, j'étais parti sur
var txt = window.document.body.createTextRange();
pour ne pas que l'utilisateur ait à sélectionner un texte dans la fenêtre. Mais bon, là je suis un peu perdu parce que si j'execute uniquement ma fenêtre de Rechercher/Remplacer, il me trouve bien les mots recherchés et il les remplace (en mettant : var txt = window.document.body.createTextRange();) dans la même fenêtre. Mais dès que je veux passer par 2 fenêtres ça foire.

Est qu'il y a une methode particulière à utiliser avec txt.select() en passant avec le window.opener.document.selection.createRange().text; ?

Jarod_Delaware
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>
Est qu'il y a une methode particulière à utiliser avec txt.select()

    à priori, je ne pense pas... mais ? jamais utilisé et pas de "sources
       proches" pour faire un test vite fait...
    reste à faire du pas à pas, avec le debogger... pour voir ce qui se passe ?
<hr />


Cordialement                Bul    
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Ok merci pour ton aide. Là je suis en train de regarder du côté des showModelessDialog :
showModelessDialog("search.htm",window,"status:false;dialogWidth:470px;dialogHeight:400px");

où je déclare dans ma page search.html une variable sData = dialogArguments;

et : var txt = sData.document.createTextRange();

Mais ça coinçe aussi en passant par cette méthode.

Jarod_Delaware
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Jarod_Delaware
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Bonjour,
Je suis arrivé a résoudre mon problème de boite de dialogue Recherher/Remplacer en passant par un showModelessDialog.

Merci pour toute l'aide.

Jarod_Delaware
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
c'était donc bien lié au pop-up.
quoi exactement... on ne saura probablement pas.
mais aucune raison à priori.
enfin... nickel si ça baigne.
<hr />


Cordialement                Bul    
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Jarod_Delaware
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
C'est clair, c'est toujours nickel quand ça marche . J'ai essayé de faire plusieurs tests pour comprendre ce qui foiré et je suis pas arrivé à trouver, pourtant tout les raisonnements me semblaient tous logiques. Au cas où, je poste ma solution sur ce post, ça pourra peut être aidé quelqu"un.

Voici le code dans la boite de dialogue rechercher:

Dans la fenêtre principale, j'appel ma fenêtre Rechercher de la façon suivante :
showModelessDialog('Find.htm', window,'dialogWidth:385px; dialogHeight:165px; scroll:no; status:no; help:no;');

Le script dans ma popup Rechercher :

var rng = dialogArguments.document.body.createTextRange();


function window.onunload() {
dialogArguments.dWin=null;
}




function searchtype(){
var retval = 0;
var matchcase = 0;
var matchword = 0;
if (document.all.blnMatchCase.checked) matchcase = 4;
if (document.all.blnMatchWord.checked) matchword = 2;
retval = matchcase + matchword;
return(retval);
}




function findtext(){
if (document.all.strSearch.value.length < 1) {
alert("entrer un texte.");
}
else {
var searchval = document.all.strSearch.value;
rng.collapse(false);
if (rng.findText(searchval, 1000000000, searchtype())) {
rng.select();
}
else {
var startfromtop = confirm("Aucun mot trouvé.\nVoulez vous recommencer du haut?");
if (startfromtop) {
rng.expand("textedit");
rng.collapse();
rng.select();
findtext(); }}}}

Jarod_Delaware