IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Récupérer le DOM sélectionné


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [AJAX] Récupérer le DOM sélectionné
    Bonjour à tous,

    Je suis confronté à un problème de Javascript.
    Je souhaite récupérer tous les éléments HTML contenus dans une sélection faite avec la souris. J'arrive sans problème à récupérer le texte sélectionné, mais impossible de trouver un solution pour récupérer les objets du DOM (les balises HTML).

    Connaissez-vous une solution ?

    Merci

  2. #2
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Points : 1 276
    Points
    1 276
    Par défaut
    Bonjour,
    Pour récupérer les éléments, tu peux passer par le fait d'obtenir la liste des enfant du noeud qui contient tes éléments.
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <DIV id="maDiv">
    <INPUT type=checkbox value=001 ID="Checkbox1">
    <INPUT type=checkbox value=002 ID="Checkbox2">
    </DIV>
    Pour récupérer les checkboxes (et éventuellement vérifier s'il ont étés sélectionnés) :
    document.getElementByID("meDiv").children
    puis pour chaque noeud enfant, je peux récupérer le innerText ou l'innerHTML
    qui te donnerons le contenu des balises sans interprétation...

    @+
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci de ta réponse,

    Je n'ai pas dû bien expliquer mon problème.

    Imaginons un utilisateur qui sélectionne une partie d'une page web, par exemple "du texte avec un mot en gras".
    Le but étant alors de récupérer tous le dom sélectionné par l'utilisateur, c'est-à-dire les nodes :
    ...-TEXT avec pour valeur : "du texte avec "
    ...- BOLD avec pour valeur :
    ......- TEXT avec pour valeur : "un mot"
    ...- TEXT avec pour valeur : " en gras"
    Tous le DOM sélectionné en fait.

    Ca ne semble pourtant pas très compliquer comme ça, je pense donc que ça doit bien être possible.

  4. #4
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Points : 1 276
    Points
    1 276
    Par défaut
    Bonjour,

    Essai ca : (je nai aucun mérite je l'ai trouvé là : http://www.quirksmode.org/js/selected.html
    et je n'ai que modifié la fin : alert...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function getSel()
    {
    	var txt = '';
    	var foundIn = '';
    	if (window.getSelection)
    	{
    		txt = window.getSelection();
    		foundIn = 'window.getSelection()';
    	}
    	else if (document.getSelection)
    	{
    		txt = document.getSelection();
    		foundIn = 'document.getSelection()';
    	}
    	else if (document.selection)
    	{
    		txt = document.selection.createRange().text;
    		foundIn = 'document.selection.createRange()';
    	}
    	else return;
    	alert( 'Found in: ' + foundIn + '\n' + txt);
    }
    les trois moyens de récupérer le texte sélectionné dépendent du navigateur,
    visite la page que j'ai placé ci dessus pour complément d'info

    @+

    [Eric Berger]Balises code ajoutées, merci d'y penser à l'avenir
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Encore merci pour ton aide, mais...

    Récupérer le TEXTE sélectionné, j'y arrive. Mais j'ai besoin de récupérer les NODES sélectionnés.
    Au finial, je doit donc obtenir, non pas une simple chaine, mais un tableau d'éléments HTML, le petit bout de l'arbre DOM qui est sélectionné.

    Je cherche... et suis preneur d'idées ;-)

  6. #6
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Salut,
    Petite piste : regarde comment fait l'éditeur que tu as utilisé (vbulletin) pour poster ton message sur ce forum. Sous firefox, en utilisant le plugin web developer, tu peux voir les fichiers javascript utilisés par une page. Voici ce que j'ai pu trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    		/**
    		* Get Selected Text
    		*/
    		this.get_selection = function()
    		{
    			var range = this.editdoc.selection.createRange();
    			if (range.htmlText && range.text)
    			{
    				return range.htmlText;
    			}
    			else
    			{
    				var do_not_steal_this_code_html = '';
    				for (var i = 0; i < range.length; i++)
    				{
    					do_not_steal_this_code_html += range.item(i).outerHTML;
    				}
    				return do_not_steal_this_code_html;
    			}
    		};
    Sachant que this.editdoc est trés probablement un simple textarea.

    Je pense que tu peux accéder aux noeuds sous mozilla avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var node = range.startContainer;
    var pos = range.startOffset;
    Bon courage !

    Y.Chaouche

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup yacinechaouche !

    La piste que tu as trouvé semble la bonne... avec les navigateurs basés sur Gecko.
    Pour les autres... effectivement il va falloir bricoler :-(

    Haaa les joies du dév. Web côté client !

  8. #8
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    une autre piste
    tu passe part un getTextElements() qui te retourne une colection de toutes les zone de texte.
    tu parcours la liste jusqu'a retrouver le début de ton texte.
    lorsque le début coresponds tu regarde si le contenu deton noeud texte est bien la chaine que tu as capturé. dans ton exemple le noeud doit avoir "du texte avec" si ce n'est pas le cas tu continue ton parcour en cherchant le début
    si c'est bien lui alors le premier tag est le fils suivant du parent de ton noeud texte et tous mes autres en cascade
    tu t'arête des que dans ton parcours tu à reconstitué ta chaine.

    A+JYT

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    je cherche à récupérer la taille en pixel du texte sélectionné dans un TextBox.

    Sous IE, pas de soucis, grace à ces 2 lignes:
    sel = document.selection.createRange();
    taille = sel.offsetLeft;


    Sous FF (1.5) je n'arrive meme pas à récupérer le texte sélectionné. Un post ici dit qu'il faut utiliser "window.getSelection();" pour récupérer le texte sélectionné, sauf que ca ne fonctionne plus dès lors que le texte en question est dans un InputText (il ne me renvois pas d'erreur, mais renvoi une chaine vide)

    et bien sur, document.getElementById('MonTextBox').getSelection() ne fonctionne pas (erreur, "is not a function")

    quelqu'un aurait une idée svp ??

    merci

    NiHaoMa

  10. #10
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    TextBox n'est pas un element DOM standard, InputText non plus.

    Y.Chaouche

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    merci pour ta précision mais je ne vois pas en quoi cela pourait m'aider ....que ce soit du DOM ou pas, FF est capable d'afficher un TextBox, javascript est capable d'accéder à certaines propriétés de ce TextBox, et meme via DOM il est possible de créer des TextBox, donc, qu'il soit "standard" ou pas, il n'y à pas de raison pour que le moteur JS de FF ne me donne pas d'une facon ou une autre l'information dont j'ai besoin puisque lui meme l'utilise forcément (ne serait-ce que pour le copier/coller de texte par exemple)

  12. #12
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Je te conseil d'installer Firebug sur ta machine http://getfirebug.com
    Tu auras accés à beaucoup d'informations sur les éléments que tu séléctionne avec ta souris.

    Sélectionne ton text et essaye de voir son type , soit avec firebug, soit avec inspect this ! Et rends nous la réponse.

    Y.Chaouche

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    c'est une bonne idée à laquelle je n'avais pas penser.
    je l'ai installer et ai vérifier toutes les propriété/méthodes dispo sur mon champ text, hélas outre les selectionStart et selectionEnd, rien ne semble indiquer quelque chose en rapport avec ce fichu curseur...

    je suis pourtant certain d'avoir déja croiser des sites faisant ce que je veux faire (hélas je ne me souviens plus lesquels), à savoir, déplacer un DIV (ou tout autre objet d'ailleurs) en fonction de ce qui est saisi dans un champ texte !

    et plus "idéologiquement", ca me fait mal de penser que IE est capable de faire quelque chose que FF ne sait pas faire !

  14. #14
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Si tu désigne par "champs texte" un INPUT avec attribut type="texte",

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form name="F1">
    <input type='text' name="T1"/>
    </form>
    alors là il faut plutôt chercher sa dimension avec ses propriétés de style.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    width  = document.F1.T1.style.width
    ou quelque chose comme ça.

    Y.Chaouche

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    c'est bien un champ text dont je parle, mais ce ne sont pas ses dimenssion que je recherche....je veux connaitre l'espacement en pixel entre le bord gauche de ce champ texte et le curseur (curseur de frappe, pas la souris)

  16. #16
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    OK je comprends mieux. Je ne savais pas qu'on pouvait avoir cette information.

    Y.Chaouche

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    bah justement, sous FF, pas moyen de récupérer cette info, tandis que sous IE, je l'ai en 2 lignes...

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/03/2012, 11h26
  2. [JTree] Récupérer le noeud sélectionné, sans événement
    Par Bobsinglar dans le forum Composants
    Réponses: 4
    Dernier message: 26/05/2005, 18h06
  3. Réponses: 2
    Dernier message: 13/11/2003, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo