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 :

Edition BBCode : objet selection


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Edition BBCode : objet selection
    Bonjour,
    J'essaie de créer un document d'édition d'une page BBCode dans un textarea.
    J'ai trouvé une foule de trucs mais je bloque au niveau de l'édition et de la sélection.
    Je voudrais faire quelque chose qui ressemble à ce forum.
    Code html : 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
    23
    <h2>Rédaction d'une page d'accueil personnalisée</h2>
     
    <div id="bbcodeBtns">
    	<button type="button" class="bbcodeBtn" data-open="[h2]" data-close="[/h2]">Titre</button> <!-- Remplacer par liste d'options de <h1> à h6> -->
    	<button type="button" class="bbcodeBtn" data-open="[p]" data-close="[/p]">Paragraphe</button>
    	<button type="button" class="bbcodeBtn" data-open="[br]" data-close=null>Retour à la ligne</button>
    	<button type="button" class="bbcodeBtn" data-open="" data-close="">Italique</button>
    	<button type="button" class="bbcodeBtn" data-open="" data-close="">Gras</button>
    	<button type="button" class="bbcodeBtn" data-open="[ul]" data-close="[/ul]">Liste</button>
    	<button type="button" class="bbcodeBtn" data-open="[ol]" data-close="[/ol]">Liste ordonnée</button>
    	<button type="button" class="bbcodeBtn" data-open="[li]" data-close="[/li]">Elément de liste</button>
    	<button type="button" class="bbcodeBtn" data-open="" data-close="">Lien</button>
    	<button type="button" class="bbcodeBtn" data-open="[img=url_image alt=alt_image]" data-close=null>Image</button>
    	<!-- ajouter le choix des couleurs -->
    </div>
    <form>
    	<p><textarea id="textArea" name="textArea" rows="15" cols="100">Lorem ipsum</textarea></p>
    	<button type="submit" name="save">Enregistrer</button>
    	<button type="reset" name="reset">Effacer ce texte</button>
    	<button type="submit" name="del" title="Supprime la page déjà enregistrée">Supprimer la page</button>
    </form>
     
    <script type="module" src="../js/bbCode.js"></script>
    Code js : 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
    23
    24
    25
    const
    	bbCodeBtns	= document.querySelectorAll(".bbcodeBtn")
    	,textArea	= document.getElementById("textArea")
    	;
     
    if (bbCodeBtns.length){
    	bbCodeBtns.forEach(function(curBtn,index){
    		curBtn.addEventListener('click', function(e){
    			// with two tags bbCode (opening and closing) in textContent
    			alert(curBtn.dataset.open);
    			alert(curBtn.dataset.close);
    			var selObj = document.getSelection();
    			var selRange = selObj.getRangeAt(0);
    			console.log(selObj);
    			//console.log(selRange);	// Provoque une erreur
    			if(curBtn.dataset.close != null){
    				// Condition block 'if' without selected text
    				// Condition block 'if' with a selected text
    			}
    			else{
    				// with only an opening tag
    			}
    		}, false );
    	});
    }

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    J'ai essayé d'avancer avec ce tuto mais je n'arrive pas à gérer la sélection. En particulier, quelle que soit la sélection dans l'élément textarea, les propriétés anchorOffset et focusOffset valent 0.
    Voici comment j'ai modifié mon code:
    Code js : 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
    23
    24
    25
    26
    27
    28
    29
    30
    const
    	bbCodeBtns	= document.querySelectorAll(".bbcodeBtn")
    	,textArea	= document.getElementById("textArea")
    	,sel		= document.getSelection()
    	;
     
    if (bbCodeBtns.length){
    	bbCodeBtns.forEach(function(curBtn,index){
    		curBtn.addEventListener('click', function(e){
    			// with two bbCode-tags (opening and closing) in textArea content
    			textArea.focus();
    			var content = sel.anchorNode.firstChild.value;
    			if(curBtn.dataset.close != null){
    				// with no selected text
    				console.log(textArea);		// élément textArea
    				console.log(sel);		// objet selection
    				console.log(content);		// "Lorem ipsum"
    				// with no selected text
    				if (sel.isCollapsed){
    				}
    				// with some selected text
    				else{
    				}
    			}
    			// with only one tag (opening or closing)
    			else{
    			}
    		}, false );
    	});
    }

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Il semble que ces méthodes sur les textarea ne fonctionnent pas sur tous les navigateurs mais il y a d'autres méthodes qui leurs sont spécifiques : selectionStart et selectionEnd.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Merci, c'est bien ce que je voulais!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Méthode add() de l'objet select
    Par webrider dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/01/2008, 14h01
  2. [JComboBox] l'Objet selected s'affiche dans le Renderer
    Par grabriel dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/03/2007, 14h08
  3. Réponses: 1
    Dernier message: 13/09/2006, 11h50
  4. IE : Empêcher l'objet select au premier plan
    Par Sergejack dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/08/2006, 23h53
  5. Elargissement automatique de l'objet SELECT dans IE
    Par djamonag dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 24/05/2006, 12h01

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