我们在index.js
中为所有功能按钮添加点击事件监听,在点击对应按钮时执行相应的原生命令。
window.onload= function() {const btns = document.getElementById('editorBar').getElementsByTagName('li');for (let i=0; iconst btn = btns[i];const command = btn.getAttribute('command');btn.onclick= function() {document.execCommand(command, false, '');};}
};
然后我们回到页面中进行点击,会发现除了重做和撤销,其它按钮都不起作用,哪怕我们在可编辑区域输入文字,选择一段文字,然后点击按钮,也是没有任何效果。(可在1.0.2
分支复现)
原因是:
document.execCommand
命令只有使用button
元素触发才能生效。
所以,我们改造一下HTML,将按钮全部改为button
元素:
index.html <-->
由于将原来的元素上套了一层button
元素,所以样式与我们最初设计的有了出入:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TjMJHt42-1670512440938)(https://gitee.com/hjb2722404/tuchuang/raw/master/img/202203111635140.png)]
我们通过为button
元素增加CSS规则来修复:
/**index.css **/.editor-toolbar ul li button {background-color: #fff;border: none;cursor: pointer;
}
我们将点击事件监听加在button
上,以代替原来的li
上的监听:
// index.js
const btns = document.getElementById('editorBar').getElementsByTagName('button');
然后,我们再在页面可编辑区域输入文本,并点击功能按钮,可以得到以下结果:(可在1.0.3
分支上复现)
Ctrl+v
)img
标签,表现在页面上是两个空格我们看到,上面的测试结果中,还有很多功能是没有反应的,这是因为这些功能都是需要参数的,我们下一节将实现它们。
本系列文章代码可从gitee获取
本节内容在 1.0.2
分支