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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Author" content="Daniel Hagnoul" />
<title>Page type</title>
<style type="text/css">
body {
background-color:#696969;
color:#000000;
font-family:Arial, Helvetica, sans-serif;
font-size:medium;
font-style:normal;
font-weight:normal;
line-height:normal;
letter-spacing:normal;
}
div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {
margin:0px;
padding:0px;
}
div#conteneur {
width:95%;
margin:12px auto;
padding:6px;
background-color:#FFFFFF;
color:#000000;
border:1px solid #999999;
font-size:0.8em;
}
.ajoutBalise { /* Cette classe est indispensable, mais elle peut être vide ! */
margin-top:12px;
margin-left:12px;
}
</style>
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js"></script>
<script type="text/javascript">
$.fn.textAreaTagSelectedText = function(startTag, endTag, minTagLength, moveCursor) {
//Author : Daniel Hagnoul, 16 mai 2009. v1.0.0
//Modified 18 mai 2009 [bug in Internet Explorer] v1.1.0
//Modified 19 mai 2009 [use range.parentElement()] v1.2.0
//Modified 21 mai 2009 [use scrollValue = this.scrollTop(); for F3] v1.2.1
//Modified 22 mai 2009 [add minTagLength] v1.2.2
var s = ""; //renvoie une chaine vide par défaut
if (arguments.length != 4) return s;
for (var i = 0; i < arguments.length; ++i) {
if (arguments[i] == "undefined") return s;
}
if ((startTag.length < minTagLength) || (endTag.length < minTagLength)) return s;
if (this[0].tagName != "TEXTAREA") return s;
//on est maintenant certain que this[0] est bien un textarea
if (document.selection) {
//Internet Explorer
var range = document.selection.createRange();
s = range.text;
if (s.length > 0) {
var node = range.parentElement();
if (node.nodeName != "TEXTAREA") {
s = "";
} else if ((startTag.length > 0) && (endTag.length > 0)) {
range.text = startTag + s + endTag;
/* Ajustement de la position du curseur */
if (moveCursor == false) {
//le curseur reste a l'emplacement ou le texte a été selectionner
range = document.selection.createRange();
var pos = startTag.length + s.length + endTag.length;
range.moveStart('character', pos);
range.collapse();
range.select();
} else if (moveCursor == true) {
//le curseur va à la fin du texte
this.select();
range = document.selection.createRange();
var pos = this.val().length;
range.moveStart('character', pos);
range.collapse();
range.select();
}
}
}
} else if (this[0].selectionStart != "undefined") {
//Firefox
//Firefox renvoie toujours une valeur, même si la sélection n'est pas dans this !
var startPos = this[0].selectionStart;
var endPos = this[0].selectionEnd;
//si les valeurs sont égales la sélection n'est pas dans le textarea !
if (startPos != endPos) {
s = this.val().slice(startPos, endPos);
if ((startTag.length > 0) && (endTag.length > 0)) {
var scrollValue = this.scrollTop();
var debut = this.val().slice(0, startPos);
var fin = this.val().slice(endPos);
this.val(debut + startTag + s + endTag + fin);
/* Ajustement de la position du curseur */
if (moveCursor == false) {
//le curseur reste a l'emplacement ou le texte a été selectionner
var pos = debut.length + startTag.length + s.length + endTag.length;
this[0].selectionStart = pos;
this[0].selectionEnd = pos;
this.scrollTop(scrollValue);
this.focus();
} else if (moveCursor == true) {
//le curseur va à la fin du texte
this.select();
var pos = this.val().length;
this[0].selectionStart = pos;
this[0].selectionEnd = pos;
this.scrollTop(this.height());
this.focus();
}
}
}
}
return s;
}
$(document).ready(function(){
var minTagLength = 5;
$(".ajoutBalise").click(function(){
$("#message").textAreaTagSelectedText($(this).attr("startTag"), $(this).attr("endTag"), minTagLength, false);
return false;
});
});
</script>
</head>
<body>
<div id="conteneur">
<pre style="font-family:'Times New Roman', Times, serif; font-size:14px; color:#000000;">
J'ai quelques petites questions si tu le permets,
1. j'ai remarquer que ton script n'inscris rien quand aucune chaine de caractère n'est détecter, qu'est ce qui vérifie cela ?
La fonction renvoie toujours une chaine vide par défaut.
Pour IE :
s = range.text; //s est égal au texte sélectionné, où qu'il se trouve dans le document html
if (s.length > 0) { //si s = "" renvoie une chaine vide par le return final
var node = range.parentElement(); //si s n'est pas vide, test si le conteneur est le textarea
if (node.nodeName != "TEXTAREA") {
s = ""; //ce n'est pas dans le textarea, renvoie une chaine vide par le return final
Pour F :
//Firefox renvoie toujours une valeur, même si la sélection n'est pas dans this (this == le textarea) !
var startPos = this[0].selectionStart; //la position du début de la sélection dans le textarea
var endPos = this[0].selectionEnd; //la position de la fin de la sélection dans le textarea
//si les valeurs sont égales la sélection n'est pas dans le textarea !
if (startPos != endPos) {
s = this.val().slice(startPos, endPos);
//la sélection dans le textarea n'est pas nulle
//this.val() sélectionne tout le texte du textarea
//la fonction javascript slice(debut, fin) donne le texte sélectionné.
2. Peut-on par exemple faire en sorte que les tags ne s'affiche que s'il y a au moins 5 caractères de sélectionner (sans message mais simplement que rien ne s'affiche) ?
Cette version, elle utilise : var minTagLength = 5;
3. Dans la même optique peut-on inscrire les tags s'il n'y a aucun caractères de sélectionner a l'endroit ou pointe le curseur ?
Pas avec cette méthode !
À priori, il faudrait développer quelque chose qui se base sur la position du pointeur, bonjour les problèmes d'adaptation aux différents navigateurs.
Cela dit si tu as un site web personnel je vais faire un lien vers celui-ci pour peu que tu me le donne ;) ....... et qu'il ne traite pas du piratage :aie:
Je n'ai pas de site personnel, mais j'ai créé et je m'occupe, bénévolement, de quatre sites internet.
Trois n'ont qu'une audience belge, voire plus locale encore.
Mais www.jmcu.net, JM Corporate University, (rassure-toi ce n'est pas un site qui fait l'apologie du piratage) est destiné à une audience internationale.
Il commence à être connu dans plusieurs pays, mais si tu pouvais le référencer pour lui donner un coup de pouce ce serait très gentil.
</pre>
<p>Un texte sélectionable pour test</p>
<p>Seul le bouton "Test 4" à des tags de longueur 5.</p>
<div style="margin:12px;">
<textarea id="message" style="width:400px; height:200px;"> La JM Corporate University est une Business School, Haute Institution de Commerce et de Management implantée au cur de la capitale européenne, située en périphérie, à Louvain-la-Neuve, dans un parc boisé de six hectares qui lui confère un rayonnement particulier. La mission de la JMCU Business School consiste à former des Managers responsables, ouverts à la connaissance et à la découverte des autres, rapidement opérationnels, dans un monde globalisé en perpétuelle évolution. Par cette mission, la JMCU entend, par un positionnement offensif, se placer comme une Business School Européenne de Commerce et de Management combinant exigence académique, expériences professionnelles et ouverture internationale, véhiculant aux diplômés des valeurs fondées sur laudace, louverture, lhumilité et léthique.</textarea>
<br />
<button class="ajoutBalise" type="button" startTag="[**]" endTag="[++]">Test 1</button>
<button class="ajoutBalise" type="button" startTag="[--]" endTag="[++]">Test 2</button>
<button class="ajoutBalise" type="button" startTag="[]" endTag="[++]">Test 3</button>
<input class="ajoutBalise" type="button" startTag="[$$$]" endTag="[+++]" value="Test 4" />
</div>
</div>
</body>
</html> |
Partager