Bam*_*bax 19 html javascript contenteditable
据我所知,一个元素contentEditable="true"
是某种WYSIWYG HTML编辑器.它会生成与发出的命令相对应的相关HTML标记.
例如,如果选择文本然后按Ctrl+ B,则所选文本将放置在<b></b>
标记之间.
我需要在结果文本中没有样式标记.如何抑制,劫持或控制这些命令的行为?
我可以做的其他事情:
contentEditable
而是使用textarea
.但除此之外,还contentEditable
可以很容易地突出显示正在编辑的段落.这对于一个人来说要困难得多textarea
.Ved*_*kar 16
我知道为时已晚,但是如果它可以帮助一些它应该值得一试.
以下是我处理它的方法javascript
,禁用ctrl+ Command(ctrl+ B,ctrl+ Any Key),我用过:
HTML:
<div id="xyz" onKeyDown="return disable(this,event);" contentEditable="true">
This is my Rich Text Editor
</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
function disable(x,e){
if(e.ctrlKey){ // .ctrlKey tells that ctrl key was pressed.
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
switch case statements
以下keyCode
值:
function disable(x,e){
var ret=true;
if(e.ctrlKey){
switch(e.keyCode){
case 66: //ctrl+B or ctrl+b
case 98: ret=false;
break;
case 73: //ctrl+I or ctrl+i
case 105: ret=false;
break;
case 85: //ctrl+U or ctrl+u
case 117: ret=false;
break;
}
}
return ret;
} // This will work fine for ctrl+c and ctrl+v.
Run Code Online (Sandbox Code Playgroud)
if(e.ctrlKey){
Run Code Online (Sandbox Code Playgroud)
同
if(e.ctrlKey || e.metaKey){ // Coz You'll be using CMD key on mac
Run Code Online (Sandbox Code Playgroud)
然后那可能适用于Mac OS.
注意:我以前没有处理过Mac,所以我不知道这是否是正确的做法.
And*_*man 15
我不是试图通过JavaScript来抑制不需要的标签,而是将它们设置为样式并保存/恢复特定区域中的未样式文本:
[contenteditable] {
background: #eee;
width: 15rem;
height: 4rem;
padding: 1em;
}
[contenteditable] b {
font-weight: normal;
}
[contenteditable] i {
font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)
<div contenteditable></div>
Run Code Online (Sandbox Code Playgroud)
sts*_*vik 10
contentEditable的最佳登陆页面资源可能是:
http://blog.whatwg.org/the-road-to-html-5-contenteditable
基本上,它归结为:您无法重新配置密钥代码本身 - 它们始终存在,并且它们根据浏览器的本地化而不同.
但是,您可以使用JavaScript拦截键盘命令,其中的一个示例可以在这里看到:
http://www.openjs.com/scripts/events/keyboard_shortcuts/shortcut.js
我最近一直在玩contentEditable并取得了不同程度的成功.有些事情往往比其他事情更好,并且在浏览器中产生了混合的结果.如果您真正想要的是contentEditable块元素的编辑器,请尝试查看aloha编辑器.
在 React 中,我们使用下面的代码来禁用除复制/粘贴和移动命令之外的所有命令:
const onKeyDown = (e) =>
e.ctrlKey || e.metaKey
&& ![`c`, `v`, `ArrowLeft`, `ArrowRight`].includes(e.key)
&& e.preventDefault()
const App = props => (
<div
contentEditable
suppressContentEditableWarning
onKeyDown={onKeyDown}
>
12345
</div>
)
ReactDOM.render(
<App />,
document.getElementById('react')
)
Run Code Online (Sandbox Code Playgroud)
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
Run Code Online (Sandbox Code Playgroud)