我使用Google Chrome。

我需要一个非常小的HTML编辑器,并且找到了Simple Edit。非常小的编辑器,仅用于我的需要。但是,...以及使用Content Editable的许多其他编辑器都存在一个常见问题。

问题

创建列表(在最后一个列表项上按回车两次)后,它将创建一个新的div。我期望创建一个新的段落标签。

链接

  • 在此处尝试编辑器: http://files.inlovewithcss.com/simple-edit/
  • 看一下微型源代码: https://github.com/mlabod/simple-edit/blob/master/editor.jquery.js

  • 问题

    防止div而是在列表后添加段落标签的正确方法是什么?

    最佳答案

    Bryan Allo发布的答案没有考虑您需要将光标放在div的末尾。否则,每次执行替换操作时,用户都必须按CTRL-End。

    这是我提出的解决方案,也可以在http://jsfiddle.net/82dS6/上看到它:

    function setEndOfContenteditable(contentEditableElement){
        // Taken from http://stackoverflow.com/a/3866442/1601088
        var range,selection;
        if(document.createRange){//Firefox, Chrome, Opera, Safari, IE 9+
            range = document.createRange();
            range.selectNodeContents(contentEditableElement);
            range.collapse(false);
            selection = window.getSelection();
            selection.removeAllRanges();
            selection.addRange(range);
        }
        else if(document.selection){//IE 8 and lower
            range = document.body.createTextRange();
            range.moveToElementText(contentEditableElement);
            range.collapse(false);
            range.select();
        }
    }
    
    function replaceDivWithP(el){
    
        $(el).find('div').each(function(){
            $(this).replaceWith($('<p>' + $(this).html() + '</p>'));
        });
    }
    
    $(function(){
        $(".text").simpleEdit();
    });
    
    $('.textarea').bind('keyup', function(){
        replaceDivWithP(this);
        setEndOfContenteditable(this);
    });
    
    
    ​
    

    07-24 18:03
    查看更多