formatBlock命令不会覆盖列表项上已有的块
formatBlock command does not overwrite existing block on list item
请参阅http://jsfiddle.net/4aQtk/3/
我试图通过execcommand("formatBlock",...)
来改变li
的风格。它在普通段落节点上工作得很好,但在列表项上生成节点。
Firefox 27: OK,样式元素(p, h1, h2)仅在li
元素中包裹文本。(预期)
<ul>
<li>
<h1>text</h1>
</li>
<li>another text</li>
</ul>
Chrome 33: Failed, formatBlock命令将ul
分解为几个ul
,并将ul
与样式元素包裹。
<h1>
<ul>
<li>
text
</li>
</ul>
</h1>
<ul>
<li>another text</li>
</ul>
如何防止在其上创建节点?
如果你把li的内容包装成div就可以了。
<ul>
<li><div>list item 1</div></li>
<li><div>list item 2</div></li>
<li><div>list item 3</div></li>
</ul>
h1标签不是无序列表的有效子标签,所以它将它包装在父ul之外,并在h1标签内放置一个新的ul。因为h1只是替换了div,所以就没有问题了。
我希望这对你有帮助。
编辑:它在段落中起作用的事实是它只是用h1替换p标签,所以最好的方法应该是如果h1在段落中。
From https://developer.mozilla.org/en-US/docs/Web/API/document.execCommand
在包含当前选择的行周围添加一个HTML块样式的标签,替换包含该行的块元素(如果存在的话)(在Firefox中,BLOCKQUOTE是例外-它会包装任何包含的块元素)。要求将标记名称字符串作为值参数传入。几乎所有的块样式标签都可以使用(例如:"h1","p","dl","blockquote")。Internet Explorer只支持标题标签H1 - H6、ADDRESS和PRE,这些标签还必须包含分隔符<)
<li>
元素表示一个项目列表,因此formatBlock命令将用Block元素(p, h1,…)将其包裹在列表中。因为li元素不允许这样做,所以列表被分成多个列表,并且"要格式化的列表"被Block元素包裹。
由于您的代码总是在li元素上触发,因此这是一次又一次地执行,因为您正在执行格式化命令,该命令不打算用于这类元素。@Steven Vanden Broucke发布了一个解决方案,如何避免这种情况。
由于没有明确规定如何处理,我建议这样做。
编辑:针对这个问题,我在chromium上创建了一个bug报告。(https://code.google.com/p/chromium/issues/detail?id=372925&thanks=372925&ts=1400009358)
- 要求输入在数据列表中
- 从javascript创建一个列表
- 如何使用jQuery选择下拉列表的值
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- 如何使用json将对象列表从java转换为javascript
- 区分JSON中的矩阵和列表列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 接受不在列表中的值-引导组合框
- 当我点击jsf中的primefaces命令按钮时,如何获得点击事件
- 禁用jQuery中的下拉列表
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 如何在javascript中迭代数字列表
- 如何在按钮中显示下拉列表中选定的元素
- Google Drive Web API”;文件:列表;带有q参数和nextPageToken的命令无法正常工作
- 输出完整的命令列表
- 向angular选项列表中添加额外的命令
- formatBlock命令不会覆盖列表项上已有的块