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 Nud élément
2 Nud attribut
3 Nud texte
4 Nud pour passage CDATA
5 Nud pour référence d'entité
6 Nud pour entité
7 Nud pour instruction de traitement
8 Nud pour commentaire
9 Nud document
10 Nud type de document
11 Nud de fragment de document
12 Nud pour notation
13 Nud é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
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.