我正在使用香草JavaScript和document.execCommand()构建业余富文本编辑器,对于启用文本编辑器的核心功能至关重要。
例如,粗体,斜体和无序列表命令:
Array.from(toolbarBtn).forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
if (e.target.id === "toolbar__btn--bold") {
format('bold');
}
if (e.target.id === "toolbar__btn--italic") {
format('italic');
}
if (e.target.id === "toolbar__btn--unorderedlist") {
format('insertunorderedlist');
}
});
});
但是,当在MDN Web文档上查找此命令时,发现该命令已被废弃:
Obsolete此功能已过时。尽管它可能在某些浏览器中仍然可以工作,但不建议使用它,因为可以随时将其删除。尝试避免使用它。
所以,我想知道香草JavaScript中是否有任何替代方法可以像execCommand()一样创建富文本编辑器的所有功能?
Google搜索没有给我任何结果,因此我想知道与此同时宣布该方法过时,但没有建议替代方法的可能性。
对MDN标记document.execCommand()
的更改都已过时,并且在https://github.com/mdn/browser-compat-data/commit/2d3890a处进行了相关更改,部分原因是https://w3c.github.io/editing/ActiveDocuments/execCommand.html的红色警告带有以下声明:
此规范不完整,预计不会超出草案状态。作者不应直接使用其中的大多数功能,而应使用JavaScript编辑库。用户代理不能一致或完全实现本文档中描述的功能,并且在可预见的将来,这种情况也不会改变。
就香草JavaScript中的任何替换方法而言,同一警告框显示为:
预计将来两个规范都将被内容可编辑和输入事件替换
…但是可悲的是,我们还没有到那儿。因此,不幸的是,即使我们还没有替代品,我们现在也知道document.execCommand()
不能以跨浏览器的方式进行互操作,并且浏览器项目也无法修复它。这就是MDN警告说的原因:
不鼓励使用它。尝试避免使用它。
因此,正如上面的评论所言,它类似于拖放的情况:已知它以多种方式被破坏,并且这种方式已经存在了很长时间,因为修复它基本上是不实际的。
这就是为什么规范中的红色警告框还显示开发人员和作者的原因:
不应直接使用大多数这些功能,而应使用JavaScript编辑库
[]在线富文本编辑器工具(如CKEditor和TinyMCE)中可用的JavaScript编辑库为您“覆盖” document.execCommand()
中所有潜在的缺陷。如果要尝试从头开始在香草JavaScript中为document.execCommand()
编写自己的健壮处理方法,那么经过大量的工作和时间,基本上,您将需要重复创建基于JavaScript的JavaScript库的工作工具。
因此,最重要的是:为节省大量时间和工作,请使用可用的库之一。