til*_*ryj 10 javascript html5 contenteditable
当您<li>在内容可编辑<ul>标记内一直退格到标记的开头时,<li>将删除所有剩余标记.
<ul contenteditable="true">
<li>Hello</li>
<li>World</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
jsfiddle:http://jsfiddle.net/8Q53V/
将光标放在世界中的'd'后面,然后退回到行的开头.再次点击退格键时,它也会删除"Hello"列表项.你怎么能防止这种行为?
更新:看起来此行为仅存在于Chrome中
这是我发现的:
如果父
ul元素后面没有最小渲染空间为1px x 1px的任何其他元素,则只会出现Opera和Chrome中的可疑列表的错误行为.display元素的值无关紧要,只要它是非空的或具有CSS的设置高度维度即可.
所以添加一个简单的<div style="height: 1px;">将回答你最直接的问题.
但是,contenteditable在询问时,您无法可靠地使用HTML中的列表.
这个问题引起了我的兴趣,我在Win 8.1上测试了Moz FF 29-30,Opera 21,Google Chrome 35和IE 11.我测试了简单的键,如Enter,Backspace和Delete.
TL; DR:IE 11完全搞砸了,如果
ul后面跟着一个渲染大小的元素,那么Opera和Chrome会做得很好,并且Moz FF会插入一个奇怪的<br type="_moz"></br>标签.你会需要e.preventDefault(),e.keyCode/charCode以及Selection与RangeJS API来创建在所有浏览器都能正常工作的自定义列表CONTENTEDITABLE.但是,这些先决条件在所有浏览器上都不能始终如一.最佳解决方案:使用现有编辑器或一些不可见的文本输入进行输入.
这些是详细的问题:
点击Enter添加新的li将添加以下标记:
<li><br><li><li><br type="_moz"></br>li是非空的:<li><br></li>如果它是空的,IE完全混乱并插入一个p,然后<ul contenteditable="">在它之后复制一个空,只有一个<br>标签在里面.这个空ul将被添加后,原来的元素之后的元素,如果有的话.击中Backspace删除li:not(:first-child)将执行以下操作:
ul后面没有一个具有渲染大小的元素,那么所有的元素都li将被删除.如果是,则发生预期的行为.(一个li被删除).li被删除).但是,删除a后,Moz FF会将光标移出可信区域li.击中Backspace删除第一个li 应该不惜一切代价阻止.
对于每个测试的浏览器,这会打破列表布局.所有新Enter命中都将生成div列表中的直接子项.
击中Delete除去随后li在所有测试的浏览器一贯的作品.随后li将被删除,其中的任何内容将被转移到当前li
在空白处键入第一个字母li将执行以下操作:
<br>标签已删除.<br type="_moz">标记未删除.删除空白中的唯一字母li将执行以下操作:
<br>自动插入另一个标签.<br type="_moz">仍然存在.小提琴:http://jsfiddle.net/8Q53V/8/(第一个ul是自定义编码行为,不完美,第二个ul是标准的)
| 归档时间: |
|
| 查看次数: |
3114 次 |
| 最近记录: |