execCommand后返回焦点到contenteditable?

Fur*_*lon 13 jquery contenteditable

我有以下代码演示contenteditable属性和一个按钮,将粗体文本注入带有contenteditable区域的段落.我的问题是如何将焦点返回到我在单击粗体后停​​止的位置,如果突出显示某些文本,然后单击粗体,则会将这些文本加粗,但焦点将不再存在.如果您没有选择任何内容并单击粗体,焦点将消失,如果您再次单击上次停止的位置,则可以输入粗体文本.

非常感谢您的帮助!

<head>
    <style type="text/css">
    #container{
        width:500;
    }
    .handle{
        float:left;
    }
    </style>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
    <script type="text/javascript">
    $(function(){
        $('#bold').click(function (){
            document.execCommand('bold', false, true);
        });
    });
    </script>
</head>
<button id="bold">Bold</button>
<div id="container">
<div class="c"><p contenteditable>Some text here asdf asdf asdf asdf asdf asd fasd fsa dfsa df asdf sadf sa dfa sdf sadf asd fsa df sadf asdf asdf asd fas df asdf as </p></div>

<div class="c"><p contenteditable>Some text here asdf asdf asdf asdf asdf asd fasd fsa dfsa df asdf sadf sa dfa sdf sadf asd fsa df sadf asdf asdf asd fas df asdf as </p></div>
</div>
Run Code Online (Sandbox Code Playgroud)

小智 9

你应该使用.contents()

var current;
$(function(){
    $("p[contenteditable]").focus(function() {
        current = this;
    });

    $('#bold').click(function (){
            document.execCommand('bold', false, true);
            $(current).contents().focus();
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 为什么.contents()调用? (8认同)

ALF*_*ezE 1

您可能希望将最后单击的项目存储在变量中,然后在执行.execCommand后对其调用.focus() 。我猜是这样的:

 $(function(){
        $('p.editable').click(function() {
            var clickedItem = $(this);
            clickedItem.attr('contenteditable', true).focus();
            $('#bold').click(function (){
                    document.execCommand('bold', false, true);
                    clickedItem.focus();
            });
        });
    });
Run Code Online (Sandbox Code Playgroud)

这样您还可以"contenteditable"从标记中删除该属性...

华泰

  • 每次单击一个段落时,这都会将操作绑定到“#bold”的单击事件,从而导致处理程序被绑定多次。你不想要这样。 (3认同)