Accueil > > > OUTIL DE SÉLECTION
OUTIL DE SÉLECTION
Information sur la source
Description
Cette fonction, que j'agrandirai au fur et à mesure de mes découvertes permet d'accéder à certaines informations sur la sélection : le tout cross-browser (Firefox, IE, Safari, Opéra et Maxthon). Les fonctions présentes pour l'instant : - selection.getText() --> Retourne le texte de la sélection - selection.getHtmlText() --> Retourne le code HTML de la sélection - selection.clean() --> Retourne le code HTML de la sélection avec les éléments non-voulus supprimé - selection.isText() --> Retourne si le texte de la sélection est du texte (true) ou s'il comporte du HTML (false) --> Non cross-browser Exemples et informations ici : http://jdmcreator.110mb.com/source/selection.html
Source
- var selection=new selectionObject();
- function selectionObject(){
-
- this.getHtmlText=function(){
- if(document.selection)
- {
- return document.selection.createRange().htmlText
- }
- var selection2 = window.getSelection();
- var range = selection2.getRangeAt(0);
- if (range) {
- var div = document.createElement('div');
- div.appendChild(range.cloneContents());
- return div.innerHTML;
- }
-
- };
-
- this.getText=function(){
- return (!!document.getSelection) ? document.getSelection() :
- (!!window.getSelection) ? window.getSelection() :
- document.selection.createRange().text;
- }
-
- this.onCopy=function(wh,tn,yn,yn2){
- if(wh=="disabled" && tn==undefined){
-
- document.body.setAttribute("onCopy","return false;");return true
-
-
- }
- if(wh=="disabled" && tn!=undefined){
- tn.setAttribute("onCopy","return false;");return true;
-
- }
-
- if(wh=="enabled" && tn==undefined){
-
- document.body.setAttribute("onCopy","return true;");return true;
-
- }
- if(wh=="enabled" && tn!=undefined){
-
- tn.setAttribute("onCopy","return true;");return true;
-
- }
-
- if(wh=="copyIn"){
- document.body.setAttribute("onCopy","selection.copyIn('"+tn+"','"+yn+"');return "+yn2+";");return true;
-
- }
-
-
-
- }
-
- this.copyIn=function(tn,yn){
- eval(tn+"='"+this.getHtmlText()+"';");
-
- if(yn!=undefined){
- eval(yn);
- }
- }
-
-
- /* Mettez comme arguments les nombres suivant selon les éléments que vous voulez supprimé :
-
- 1 N½ud élément
- 2 N½ud attribut
- 3 N½ud texte
- 4 N½ud pour passage CDATA
- 5 N½ud pour référence d'entité
- 6 N½ud pour entité
- 7 N½ud pour instruction de traitement
- 8 N½ud pour commentaire
- 9 N½ud document
- 10 N½ud type de document
- 11 N½ud de fragment de document
- 12 N½ud pour notation
- 13 N½ud élément mais avec vérification supplémentaire pour garder les commentaires
-
-
- */
- this.clean=function(wh){
-
- if(!document.all){
- var selection2 = window.getSelection();
- var range = selection2.getRangeAt(0);
- if (range) {
- var div = document.createElement('div');
- div.appendChild(range.cloneContents());
-
- }
- else
- {
- var div = document.createElement('div');
- div.innerHTML=document.selection.createRange().htmlText;
- }
-
- for(var j=0;j<this.clean.arguments.length;j++){
-
- ty=this.clean.arguments[j];
- for(var i=0;i<startCall(div).length;i++){
- tn=startCall(div)[i];
- if(tn.parentNode==null){
- continue;
- }
- if(tn.tagName=="IMG"){
- alert(tn.tagName+"|"+tn.nodeType);
- }
- if(tn.nodeType==ty && ty!=13){
-
- startCall(div)[i].parentNode.removeChild(startCall(div)[i]);
-
- }
- if(ty==13 && tn.nodeType==1 && tn.nodeName!="comment"){
- startCall(div)[i].parentNode.removeChild(startCall(div)[i]);
- }
-
-
-
- }
- }
-
-
- }
-
- return div.innerHTML;
-
- }
-
- this.isText=function(ty){
-
- if(this.getHtmlText()==""){
-
- if(ty==undefined){
-
- return null;
- }
-
- return ty;
- }
-
- tn=document.createElement("div");
-
- try{
-
- tn.innerText=this.getText();
-
- }
- catch(e){
- tn.textContent=this.getText();
- }
-
-
- return tn.innerHTML==this.getHtmlText();
-
- }
-
- }
-
- function startCall(quoi){
- startCall_arr=new Array();
- appel(quoi);
-
-
-
- return startCall_arr;
- }
- function appel(quoi)
- {
-
-
-
- startCall_arr.push(quoi);
-
- for ( var n=0; n<quoi.childNodes.length; n++ )
- {
- appel(quoi.childNodes[n]);
-
-
- }
-
- }
var selection=new selectionObject();
function selectionObject(){
this.getHtmlText=function(){
if(document.selection)
{
return document.selection.createRange().htmlText
}
var selection2 = window.getSelection();
var range = selection2.getRangeAt(0);
if (range) {
var div = document.createElement('div');
div.appendChild(range.cloneContents());
return div.innerHTML;
}
};
this.getText=function(){
return (!!document.getSelection) ? document.getSelection() :
(!!window.getSelection) ? window.getSelection() :
document.selection.createRange().text;
}
this.onCopy=function(wh,tn,yn,yn2){
if(wh=="disabled" && tn==undefined){
document.body.setAttribute("onCopy","return false;");return true
}
if(wh=="disabled" && tn!=undefined){
tn.setAttribute("onCopy","return false;");return true;
}
if(wh=="enabled" && tn==undefined){
document.body.setAttribute("onCopy","return true;");return true;
}
if(wh=="enabled" && tn!=undefined){
tn.setAttribute("onCopy","return true;");return true;
}
if(wh=="copyIn"){
document.body.setAttribute("onCopy","selection.copyIn('"+tn+"','"+yn+"');return "+yn2+";");return true;
}
}
this.copyIn=function(tn,yn){
eval(tn+"='"+this.getHtmlText()+"';");
if(yn!=undefined){
eval(yn);
}
}
/* Mettez comme arguments les nombres suivant selon les éléments que vous voulez supprimé :
1 N½ud élément
2 N½ud attribut
3 N½ud texte
4 N½ud pour passage CDATA
5 N½ud pour référence d'entité
6 N½ud pour entité
7 N½ud pour instruction de traitement
8 N½ud pour commentaire
9 N½ud document
10 N½ud type de document
11 N½ud de fragment de document
12 N½ud pour notation
13 N½ud élément mais avec vérification supplémentaire pour garder les commentaires
*/
this.clean=function(wh){
if(!document.all){
var selection2 = window.getSelection();
var range = selection2.getRangeAt(0);
if (range) {
var div = document.createElement('div');
div.appendChild(range.cloneContents());
}
else
{
var div = document.createElement('div');
div.innerHTML=document.selection.createRange().htmlText;
}
for(var j=0;j<this.clean.arguments.length;j++){
ty=this.clean.arguments[j];
for(var i=0;i<startCall(div).length;i++){
tn=startCall(div)[i];
if(tn.parentNode==null){
continue;
}
if(tn.tagName=="IMG"){
alert(tn.tagName+"|"+tn.nodeType);
}
if(tn.nodeType==ty && ty!=13){
startCall(div)[i].parentNode.removeChild(startCall(div)[i]);
}
if(ty==13 && tn.nodeType==1 && tn.nodeName!="comment"){
startCall(div)[i].parentNode.removeChild(startCall(div)[i]);
}
}
}
}
return div.innerHTML;
}
this.isText=function(ty){
if(this.getHtmlText()==""){
if(ty==undefined){
return null;
}
return ty;
}
tn=document.createElement("div");
try{
tn.innerText=this.getText();
}
catch(e){
tn.textContent=this.getText();
}
return tn.innerHTML==this.getHtmlText();
}
}
function startCall(quoi){
startCall_arr=new Array();
appel(quoi);
return startCall_arr;
}
function appel(quoi)
{
startCall_arr.push(quoi);
for ( var n=0; n<quoi.childNodes.length; n++ )
{
appel(quoi.childNodes[n]);
}
}
Conclusion
Plusieurs fonctions à venir. Les 2 fonctions de base (getText et getHtmlText) en-haut ne sont pas de moi. J'ai toutefois légèrement modifié la fonction getHtmlText() pour la rendre compatible avec IE, ce qui n'a pas été très difficile '^^ . Merci à Bul3 pour la fonction appel(). Particulièrement utile pour un tas de script et d'application web ;)
La fonction getHtmlText() vient d'ici : http://groups.google.com/group/mozilla.dev.tech.do m/browse_thread/thread/7ecbbb066ff2027f
Pour plus d'information ainsi que des exemples, merci de visiter la page du projet sur mon site web : http://jdmcreator.110mb.com/source/selection.html
Historique
- 31 décembre 2009 21:07:11 :
- J'ai rajouté l'origine des fonctions
- 07 janvier 2010 00:04:52 :
- Rajout de fonctions et d'un lien vers des exemples
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
forcer 1 seule sélection d'option dans 1 select [ par esse ]
bonjour,j'ai une liste <select> dont je souhaiterais forcer la sélection sur 1 seul des <option>... pour ensuite ne pouvoir déplacer que l
Netscape, Select et Tableau [ par bavmorda ]
Bonjour,J'ai une liste (select) dans un tableau (pour des soucis de mise en forme). Ce Select contient 1 item à l'ouverture de la page. Le contenu est
[form / select] Affichage d'un contenu après une selection dans un champ select [ par wighie ]
Bonjour, J'ai un champ qui contiens une liste de "publications", chaque publication se compose d'une référence et d'un descriptif (texte + couvertur
Pb pour recuperer le contenu d'un form/select sous PHP [ par MarcStrup ]
Bonjour,Le pb est le suivant :- Pour recuperer le contenu d'une liste (form/select de type liste), je dois nommer le select sous le forme 'monselect[]
Remplacer le contenu HTML d'une page [ par mgroleau ]
Bonjour,J'aimerais connaître la procédure pour remplacer dynamiquement avec un Script Javascript le contenu HTML d'une page Web, afin d'y afficher aut
Manipuler un Menu Select (combo.) [ par syndrael ]
Bonjour,Je cherche un moyen pour effacer la premièer ligne d'un Menu Select (ou combo). Voici mon code mais j'ai une erreurfor (i=1;i<ZeSelect.opti
Contenu dynamique [ par bside8 ]
Bonjour,je voudrais, avec des flèches '-' et '+' incrémenter ou décrémenter dynamiquement une valeur :- valeur +Comment je dois m'y prendre ?Merci
Problème de compatibilié avec Netsape [ par thebigbang ]
bonjour à vous, j'ai ce code js qui tourne bien sous IE, mais sous netscape ce ne marche pas du tout.L'argument select représente un select sur la pag
écrire le contenu d'un fichier texte dans une page [ par DJDX ]
j'ai essayer avec :window.location = ("1.txt"); le résultat, ça marche, mais je peux seulement mettre un fichier par page.document.write(wind
help [ par syphaxx ]
bjr tt le monde, dans une page html j'ai un composant de type "select", en desous il y a un tableau (table), je voudrais que selon la valeur du select
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
UTILISER UN .JSUTILISER UN .JS par zaikoe
Cliquez pour lire la suite par zaikoe
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|