2010-01-13 4 views

Répondre

7

Oui, il est possible d'éviter l'insertion de paragraphes en arrêtant d'abord l'événement keydown (window.event.stopPropagation();) puis en insérant la chaîne à l'aide de l'insertion HTML command.

Cependant, IE dépend de ce divs pour les styles de réglage etc. et vous aurez des problèmes en utilisant <br> s.

Je vous suggère d'utiliser un projet comme TinyMCE or other editors et de rechercher un éditeur qui se comporte comme vous le souhaitez, car ils ont toutes sortes de solutions de contournement pour différents problèmes de navigateur. Peut-être que vous pouvez trouver un éditeur qui utilise <br> s ...

+1

Cette stratégie pauses d'annulation. Chaque fois que vous appuyez sur Entrée, vous modifiez le DOM, de sorte que l'utilisateur ne peut plus utiliser le menu Annuler pour annuler la modification! –

+2

La manipulation du DOM à l'aide des commandes NE brise PAS l'annulation. Chaque commande peut être annulée. Bien sûr, vous devez éviter des choses comme div.innerHTML = "foo"; –

6

est ici une solution (utilise jQuery). Après avoir cliqué sur le bouton "Changer en BR", la balise <br> sera insérée à la place de la balise <p></p>.

Html:

<div id='editable' contentEditable="true"> 
This is a division that is content editable. You can position the cursor 
within the text, move the cursor with the arrow keys, and use the keyboard 
to enter or delete text at the cursor position. 
</div> 
<button type="button" onclick='InsertBR()'>Change to BR</button> 
<button type="button" onclick='ViewSource()'>View Div source</button> 

Javascript:

function InsertBR() 
{ 
    $("#editable").keypress(function(e) { 
     if (e.which == 13) 
     { 
      e.preventDefault(); 
      document.selection.createRange().pasteHTML("<br/>")  
     } 
    }); 
} 

function ViewSource() 
{   
    var div = document.getElementById('editable'); 
    alert('div.innerHTML = ' + div.innerHTML); 
} 

Theselinkshelped. Exemple de travail here.

+1

utilise 'insertNode()' au lieu de 'pasteHTML()' pour IE11 + et cross browser comme mentionné [ici] (http://stackoverflow.com/questions/6690752/insert-html-at-caret-in-a-contentitable -div/6691294 # 6691294) –

5

Vous pouvez toujours apprendre à utiliser SHIFT +ENTER pour les retours en ligne simple et ENTER pour les retours de paragraphe. IE se comporte comme MS Word à cet égard.

1

Modification du line-height du <p> dans les œuvres <div> modifiables:

#editable_div p 
{ 
    line-height: 0px; 
} 
Questions connexes