Envoyé par : requiem
Date : 20/06/2006 09:40
Bonjour, désolé d'avance si ma question est bête.
J'ai vu qu'il est possible de récupérer grâce à l'arbre DOM, le texte contenu dans une balise:
getElementsByTagName('balise')[0].firstChild.data
Mais est ce que l'inverse est possible, c'est à dire de connaitre la balise à partir d'un texte ?
Je n'ais pas trouvé sur le net une telle fonction. La seule solution que je voie est de parcourir l'arbre DOM en entier de regarder dans chaque balise et dés qu'on trouve le texte alors on a aussi la balise. Mais bon un gros document HTML, cette méthode me parait trés lourde.
Quelqu'un aurait une autre solution ?
Merci d'avance.
Envoyé par : chBok
Date : 20/06/2006 11:20
Personnellement, je ne vois pas d'autres méthodes que celle que tu proposes.
Envoyé par : laurentj
Date : 20/06/2006 15:10
sur chaque noeud dom, tu as une propriété, parentNode, qui te renvoi le noeud parent. Donc si tu as le noeud texte, suffit de recupérer son parentNode pour avoir le noeud element qui le contient.
Envoyé par : hhf
Date : 21/06/2006 00:41
Je supose en fait que tu desirerais une fonction style :
document.getElementsByAttribute(attr, value);
Mais sur le contenu donc style
document.getElementsByContent(value);
Bien sur ca n'existe pas. Si j'ai bien compris ton probleme, et que tu ne peux pas mettre un attribut sur les balises qui sont suceptible de t'interesser, je te conseille de regarder du coté des treeWalkers et autre nodeiterator dans une doc javascript, ils prennent en argument une fonction qui permet de "filtrer" les noeuds qui t'interesse. Je pense que cette methode est plus efficace que de parcourir tous les noeud manuellement. Je n'ais pas d'exemples sous la main, mais si tu galeres, je te trouverais ca car j'ai deja fais des treewalkers. Je pense que ca peut allé pour ce que tu veux. Ou alors j'ai rien compris...:-D
Envoyé par : requiem
Date : 21/06/2006 10:42
Non je crois que tu as bien compris. Merci de ta réponse mais même avec les treewalker j'arrive pas a voir comment résoudre mon probleme.
En fait ce que je veux , c'est récupérer: _le texte selectionné _la balise par laquelle il est entouré _le mot précédent et suivant
var w = iframe.contentWindow; //récupération du texte séléctionné selection = w.getSelection(); alert(selection); //récupération du noeud var start = selection.getRangeAt(0).startOffset; var end = selection.getRangeAt(0).endOffset; var container = selection.getRangeAt(0).startContainer;
//affichage de la balise (entourant donc le texte selectionné) alert(container.parentNode.nodeName);
Il me reste plus qu'a récupérer le mot avant et aprés. Mais la je sais pas du tout comment faire ?
Pense tu que je peux adapter le script pour récupérer le noeud de la selection (node text) et ainsi recuperer le mot (node text) précédent ?
Ou une autre solution ?
Merci
Envoyé par : hhf
Date : 23/06/2006 23:56
si les mots precedant et suivants sont dans des balise, alors :
var prec = container.previousSibling.textContent; var next = container.nextSibling.textContent;
Non ?
Envoyé par : requiem
Date : 26/06/2006 08:37
Oui et non, en fait comme tu l'as dit il faut que le texte précédent et suivant soient dans des balises.
Or moi, je veux le mot précédent et suivant d'un texte séléctionné dans un paragraphe, c'est à dire qu'il ne sont pas encapsulés dans des balises, ou du moins elles le sont mais dans des balises #text.
C'est donc ca que je veux récupérer.
Tu m'as dit de regarder les treeWalkers mais je n'arrive pas a voir si ils prennent les balises #text comme noeud (parce qu'apparemment avec la solution précédente, les #text ne sont pas considérés comme noeud à part entière).
Merci d'avance.
Envoyé par : laurentj
Date : 26/06/2006 10:55
Tu m'as dit de regarder les treeWalkers mais je n'arrive pas a voir si ils prennent les balises #text comme noeud (parce qu'apparemment avec la solution précédente, les #text ne sont pas considérés comme noeud à part entière).
Bien sûr que si que les #text sont des noeuds DOM à part entière. À toi d'indiquer à ton treewalker que tu veux les récupérer..
Envoyé par : requiem
Date : 26/06/2006 14:04
J'ai beau chercher, je trouve pas, désolé
http://www.mozilla.org/docs/dom/samples/treewalkerdemo.xml
En mettant entire tree, on voit que les balises #text apparaissent. Mais elles entourent seulement les paragraphes.
Si par exemple, je veux le 3ieme mot du premier paragraphe (qui est ici "used"), je ne peux pas.
Je montre ?
Envoyé par : thefab
Date : 26/06/2006 14:48
Le contenu de la balise #text est une chaîne de caractères, tu ne peux pas interroger les "mots" avec DOM, il faut que tu split ta chaîne avec JS et là tu peux récupérer le Xème mot... mais aucune idée de comment récupérer le mot sélectionné...
Envoyé par : requiem
Date : 26/06/2006 15:59
Merci merci merci.
Ma solution pour ceux que ca interresse :
selection = window.getSelection(); //on recupere la place du texte selectionné dans le paragraphe var place = selection.anchorOffset //recuperation du contenu du paragraphe var start = selection.getRangeAt(0).startOffset; var end = selection.getRangeAt(0).endOffset; var container = selection.getRangeAt(0).startContainer; var contenu = container.nodeValue.toString(); var precedent=''; //on prend les 20 caracteres précédent for(var i = (place-20); i < place ; i++){ precedent = precedent + contenu.charAt(i); }
Bon là, c'est pour récupérer les 20 caractères précédent, pour récupérer le mot précédent, il suffit d'adapter (pas dur).
Encore merci
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.