Outil de sélection

Contenu du snippet

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 / Exemple :


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.dom/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

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.