J'ai une autre question concernant getSelection.Javascript getSelection
Je travaille sur un éditeur de texte WYSIWYG et j'utilise des fonctions personnalisées pour appliquer un effet HTML au texte sélectionné. Jusqu'à présent, les choses fonctionnent bien.
Actuellement, la façon dont cela fonctionne est ce que vous mettez en surbrillance, elle remplace l'ensemble du texte dans la zone de texte avec ce que vous avez sélectionné. J'essaie de comprendre comment faire pour appliquer les effets désirés sans enlever tout le reste du corps.
Pensées?
function button(type) {
var txt = '';
editor_body = document.getElementById('editor').contentWindow.document;
if (editor_body.getSelection()) {
txt = editor_body.getSelection();
} else if (editor_body.selection.createRange()) {
txt = editor_body.selection.createRange();
} else return;
switch (type) {
case "bold": txt = '<b>' + txt + '</b>'; break
case "italic": txt = '<i>' + txt + '</i>'; break
case "underline": txt = '<u>' + txt + '</u>'; break
case "strike": txt = '<strike>' + txt + '</strike>'; break
case "supscript": txt = '<sup>' + txt + '</sup>'; break
case "subscript": txt = '<sub>' + txt + '</sub>'; break
case "alignleft": txt = '<div style="text-align: left;">' + txt + '</div>'; break
case "aligncenter": txt = '<div style="text-align: center;">' + txt + '</div>'; break
case "alignright": txt = '<div style="text-align: right;">' + txt + '</div>'; break
case "alignjustify": txt = '<div style="text-align: justify;">' + txt + '</div>'; break
case "ol": txt = '<ol>' + txt + '</ol>'; break
case "ul": txt = '<ul>' + txt + '</ul>'; break
case "insertlink": insertlink = prompt("Enter image URL:", "http://"); if ((insertlink != null) && (insertlink != "")) {txt = '<a href="' + insertlink + '">' + txt + '</a>'; } break
case "insertimage": insertimage = prompt("Enter image URL:", "http://"); if ((insertimage != null) && (insertimage != "")) {txt = '<img src="' + insertimage + '">'; } break
case 'insertvideo': insertvideo = prompt("Enter video URL:", "http://"); if ((insertvideo != null) && (insertvideo != "")) {txt = '<object type="application/x-shockwave-flash" data="' + insertvideo + '" width="640" height="385"><param name="movie" value="' + insertvideo + '" /></object>';} break
}
editor_body.body.innerHTML = txt;
document.getElementById('editor').contentWindow.focus();
}
function Start() {
var e;
document.getElementById('editor').contentWindow.document.designMode = "on";
try {
document.getElementById('editor').contentWindow.document.execCommand("styleWithCSS", false, "false");
} catch (e) {
}
try {
document.getElementById('editor').contentWindow.document.execCommand("undo", false, null);
editormode = "true";
} catch (e) {
editormode = "false";
}
if (document.addEventListener) {
document.addEventListener("mouseup", dismissmenu, true);
document.getElementById("editor").contentWindow.document.addEventListener("mouseup", dismissmenu, true);
document.addEventListener("keypress", dismissmenu, true);
document.getElementById("editor").contentWindow.document.addEventListener("keypress", dismissmenu, true);
} else if (document.attachEvent) {
document.attachEvent("mouseup", dismissmenu, true);
document.getElementById("editor").contentWindow.document.attachEvent("mouseup", dismissmenu, true);
document.attachEvent("keypress", dismissmenu, true);
document.getElementById("editor").contentWindow.document.attachEvent("keypress", dismissmenu, true);
}
}
Merci pour répondre Tim. J'utilisais l'execCommand au début, mais les commandes sont limitées, vous avez un contrôle très limité sur la sortie HTML, et il est plus difficile de basculer entre le texte enrichi et le bbcode. Je sais que innerHTML n'est pas la bonne chose à faire, c'est pourquoi la question est de savoir ce que je fais au lieu de innerHTML pour remplacer la sélection uniquement. J'ai trouvé des solutions via Google, mais aucune d'entre elles ne semblait fonctionner comme elles le souhaitaient. – Cory