【问题标题】:How to insert markdown formatting inside a contenteditable div如何在 contenteditable div 中插入 markdown 格式
【发布时间】:2022-01-17 23:05:04
【问题描述】:

我正在开发 HTML 和 JS 中的降价编辑器,以前使用过 textarea,但由于它的限制,我最近开始将它移动到 contenteditable div,尝试了很多但我无法让它工作,我只需要一个在选择周围插入markdown **的基本功能,但内容可编辑的div似乎有问题,有人知道如何解决吗?

function editorInsertFormatting(txtarea, text) {
  var selectStart = txtarea.selectionStart;
  var selectEnd = txtarea.selectionEnd;
  var scrollPos = txtarea.scrollTop;
  var caretPos = txtarea.selectionStart;

  var front = txtarea.value.substring(0, caretPos);
  var back = txtarea.value.substring(
    txtarea.selectionEnd,
    txtarea.value.length
  );
  var middle = txtarea.value.substring(caretPos, txtarea.selectionEnd);
  txtarea.value = front + text + middle + text + back;
  if (selectStart !== selectEnd) {
    txtarea.selectionStart = selectStart + text.length;
    txtarea.selectionEnd = selectEnd + text.length;
  } else {
    txtarea.selectionStart = selectStart + text.length;
    txtarea.selectionEnd = txtarea.selectionStart;
  }
  txtarea.focus();
  txtarea.scrollTop = scrollPos;
  editorLiveParser();
}

【问题讨论】:

  • 你可以试试第三方库,比如 CodeMirror codemirror.net/6/docs
  • 你想markdown代表什么?没有markdown -> html标准
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: javascript html markdown


【解决方案1】:

看看 window.getSelection()、selection.getRangeAt() 和 document.execCommand,但它是一座你要爬的大山。

这是一个简单的起点...

var sel = window.getSelection();
var range = sel.getRangeAt(0);

var range0 = range.cloneRange();

range.collapse(true);
document.execCommand('insertText', false, '!!!START!!!');

sel.removeAllRanges();
sel.addRange(range0);
range0.collapse(false);
document.execCommand('insertText', false, '!!!END!!!');

查看https://jsfiddle.net/Abeeee/o0e481q3/1/ 了解运行示例

【讨论】:

  • 我可以用 execCommand 构建一个所见即所得的编辑器,但现在它已被弃用,我试图避免它,还有其他方法吗?这是WYSIWYG 的一个工作示例,这是我要转移到div 中的original
  • 但是谢谢,我会试试的,这正是我需要的
猜你喜欢
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
相关资源
最近更新 更多