javascript – 如何删除ContentEditable中的H1格式(wysiwyg)

前端之家收集整理的这篇文章主要介绍了javascript – 如何删除ContentEditable中的H1格式(wysiwyg)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

除了使用Undo之外,我认为没有办法删除内容可编辑的h1和h2标签.预期的行为是再次单击H1按钮应该关闭它,但它不会.还有一个“删除格式”按钮,但它只适用于粗体,斜体等项目.有没有办法通过JavaScript执行此操作?

编辑:结果必须删除打开和关闭H1标记,而不是用其他任何内容替换它.

请在此处查看简化的测试用例:
http://jsfiddle.net/kthornbloom/GSnbb/1/

最佳答案
我决定将我在评论中概述的方法实现到我的另一个答案:遍历所选范围内的节点并删除特定节点(在这种情况下,基于标记名称).

这是完整的演示.它不能在IE< = 8(缺少DOM范围和选择支持)中工作,但会在其他主要的当前浏览器中使用.一个问题是选择并不总是保留,但这并不难实现. http://jsfiddle.net/gF3sa/1/

此示例包括elsewhere on SO修改范围遍历代码.

  1. function nextNode(node) {
  2. if (node.hasChildNodes()) {
  3. return node.firstChild;
  4. } else {
  5. while (node && !node.nextSibling) {
  6. node = node.parentNode;
  7. }
  8. if (!node) {
  9. return null;
  10. }
  11. return node.nextSibling;
  12. }
  13. }
  14. function getRangeSelectedNodes(range,includePartiallySelectedContainers) {
  15. var node = range.startContainer;
  16. var endNode = range.endContainer;
  17. var rangeNodes = [];
  18. // Special case for a range that is contained within a single node
  19. if (node == endNode) {
  20. rangeNodes = [node];
  21. } else {
  22. // Iterate nodes until we hit the end container
  23. while (node && node != endNode) {
  24. rangeNodes.push( node = nextNode(node) );
  25. }
  26. // Add partially selected nodes at the start of the range
  27. node = range.startContainer;
  28. while (node && node != range.commonAncestorContainer) {
  29. rangeNodes.unshift(node);
  30. node = node.parentNode;
  31. }
  32. }
  33. // Add ancestors of the range container,if required
  34. if (includePartiallySelectedContainers) {
  35. node = range.commonAncestorContainer;
  36. while (node) {
  37. rangeNodes.push(node);
  38. node = node.parentNode;
  39. }
  40. }
  41. return rangeNodes;
  42. }
  43. function getSelectedNodes() {
  44. var nodes = [];
  45. if (window.getSelection) {
  46. var sel = window.getSelection();
  47. for (var i = 0,len = sel.rangeCount; i < len; ++i) {
  48. nodes.push.apply(nodes,getRangeSelectedNodes(sel.getRangeAt(i),true));
  49. }
  50. }
  51. return nodes;
  52. }
  53. function replaceWithOwnChildren(el) {
  54. var parent = el.parentNode;
  55. while (el.hasChildNodes()) {
  56. parent.insertBefore(el.firstChild,el);
  57. }
  58. parent.removeChild(el);
  59. }
  60. function removeSelectedElements(tagNames) {
  61. var tagNamesArray = tagNames.toLowerCase().split(",");
  62. getSelectedNodes().forEach(function(node) {
  63. if (node.nodeType == 1 &&
  64. tagNamesArray.indexOf(node.tagName.toLowerCase()) > -1) {
  65. // Remove the node and replace it with its children
  66. replaceWithOwnChildren(node);
  67. }
  68. });
  69. }
  70. removeSelectedElements("h1,h2,h3,h4,h5,h6");

猜你在找的JavaScript相关文章