javascript - 如何从 li 执行命令?

标签 javascript jquery contenteditable submenu execcommand

当我的菜单 li 选项被单击时,我失去了对 contentEditable 的关注,所以当我尝试执行 execCommand 时,选择不再存在并且不影响选择。如何在不添加输入的情况下解决这个问题?

更新: ** jsFiddle **

HTML

<div contenteditable=true>
    paragraph1<br/>
    paragraph2<br/>
    paragraph3
</div>
<div contenteditable=true>
    paragraph4<br/>
    paragraph5<br/>
    paragraph6
</div>
<input type=button id=show value=ToggleMenu>
<ul id=submenu>
    <li>p</li>
    <li>h1</li>
    <li>h2</li>
</ul>

Javascript

$("#show").on("click",function(){
    $("#submenu").toggle();
});
$("#submenu").on("click","li",function(){  //when this is clicked, editable div loses focus.
    document.execCommand("formatBlock", false, $(this).text());
    console.log($(this).text(), "was clicked");
});

最佳答案

您可以执行以下操作:

  • 使用mousedown而不是 click
  • 阻止默认事件行为
  • 获取相关的<li>的内容
  • 调用document.execCommand()

演示:http://jsfiddle.net/timdown/SNTyY/13/

代码:

var $submenu = $("#submenu");

$("#show").on("click",function(){
    $submenu.toggle();
});

$submenu.mousedown("li",function(e){
    var li = e.target;
    e.preventDefault();
    document.execCommand("formatBlock", false, $(li).text());
});

$submenu.click(function(e) {
    e.preventDefault();
});

关于javascript - 如何从 li 执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869648/

相关文章:

jquery - 如何在不使用 JS 的情况下让屏幕阅读器可以访问此效果

javascript - 验证表行中动态添加的输入类型

jquery - 如何检查div是否存在?

css - 如何将父级高度/宽度设置为可编辑 span-child 的高度/宽度?

javascript - 具有多个字段的 contenteditable 和 localstorage 的问题

css - 在同一行上显示两个 div,中间没有空格,在具有 contenteditable ="true"的 div 内

javascript - 在 PHP 文件中实现 JavaScript (WordPress)

javascript - session 过期时如何处理 API 调用?

javascript - 循环 JavaScript 数组并排除数组本身

javascript - 使用 jQuery 在输入字段中添加多个值