【问题标题】:javascript execCommand('delete') not delete all selection div in chromejavascript execCommand('delete') 不会删除 chrome 中的所有选择 div
【发布时间】:2015-10-30 05:14:48
【问题描述】:

我尝试用 contenteditable & execCommand 编写一个编辑器 在 Firefox 上一切正常,但在 chrome 中,“删除”命令出错。

请查看以下照片:

这是我的代码:

var $obj = $('#myBlockDivId');
var selection = rangy.getSelection();
if (selection.rangeCount > 0) selection.removeAllRanges();
var range = rangy.createRange();
range.selectNode($obj[0]);
selection.addRange(range);
range.select();

当我控制台日志:rangy.getSelection().toHtml() ==> 是正确的

但是当我打电话时:

document.execCommand("delete", null, false);

在 Firefox 上没问题,但在 Chrome 上不行,包装器 div 没有被删除。

我该如何解决这个问题?我必须使用 execCommand 因为它支持撤消和重做功能。所以,我不能使用 jquery 或 javascript dom 选择器来删除 div。

(我的英语不好,请有人更清楚地编辑我的问题,非常感谢)

【问题讨论】:

  • 您能否在jsFiddle 上发布非工作代码的示例?
  • 错误是什么?可以发一下吗?
  • 如果没有代码示例(尤其是 HTML),所有的答案都是猜测。请注意,有一个使用 Stack Snippets 的答案。请使用相同的方法,编辑您的问题以包含 HTML 和 JavaScript。

标签: javascript google-chrome contenteditable rangy execcommand


【解决方案1】:

也许您可以尝试这样做:
(请单独注意参数)

<span contentEditable>
	Select something here and after click on delete.
</span>
<input type="button" value="Delete selection" onclick="document.execCommand('delete')"/>

根据Enabled commands 上的 w3c.github.io :

在任何给定时间,可以启用或不启用支持的命令。作者可以使用 queryCommandEnabled() 判断当前是否启用了命令。 未启用的命令什么都不做,如调用命令的各种方法的定义中所述。

一些有用的链接:

2015 年 10 月 15 日 w3c 非官方草案

其他资源

希望对你有帮助!

【讨论】:

    【解决方案2】:

    试试:

    document.execCommand("delete", false, null);
    

    而不是:

    document.execCommand("delete", null, false);
    

    【讨论】:

    • 我已经尽我所能,正如你所说,我已经尝试 document.execCommand("insertHtml", false, '

      ') 覆盖旧内容,但不行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多