在contentEditable div的用户选择的开始和结尾处插入HTML标记

香蕉999

我有一个contentEditable div,我希望用户可以在其中按下一个按钮并使他们选择的文本变为粗体。现在,我的操作方式是window.getSelection.toString();获取所选内容中的文本,并将其替换为具有相同内容但window.getSelection.toString()不包含任何HTML元素的粗体元素

为了解决这个问题,我想在选择的开头和结尾添加HTML标记。我在堆栈溢出中找到了其他答案,可以将HTML添加到选择的开头和结尾,但是这些答案将div或span附加到开头和结尾,从而导致<div><b></div> Selection text <div></b></div>粗体标签与实际选择文本分离。

我没有使用任何库,并且希望不必使用任何一个。

用户名

这是一个有关如何使用window.getSelection和Range API获取(或更改)HTML内容的示例,现在是推荐的方法,并且以前还没有提供更广泛的支持:https:// caniuse。 com /#feat = selection-api

首先获取html示例:

function butclick() {
  var ediv = document.getElementById('your-editable-div'); // get a reference to the editable div
  var range = window.getSelection().getRangeAt(0); // get the range
  var aux = document.createElement("span"); // create an auxiliar tag
  aux.appendChild(range.cloneContents()); // clone (so the original selection is not removed or replaced) and insert it into the auxiliar dom tag
  alert(aux.innerHTML); // now you can get the innerHTML of the aux tag
}
<div contentEditable id="your-editable-div" style="border: solid 1px black; padding: 2px; margin: 5px;">This is <b>an editable</b> div with html tags</div>
<button onclick="butclick()">get html of selected area</button>

以及如何将html更改为其他html:

function butclick() {
  var ediv = document.getElementById('your-editable-div'); // get a reference to the div
  ediv.focus(); // optional: focus again the editable div so you can continue editting
  var range = window.getSelection().getRangeAt(0); // select first of the selections
  var aux = document.createElement("span"); // create an aux html span tag
  aux.style.backgroundColor = "red"; // apply some new style
  aux.appendChild(range.extractContents()); // extract (so the original contents are removed) and inyect into aux tag
  range.insertNode(aux); // finally insert back again the edited aux node back into the editable div, this includes the aux tag itself, but you can insert whatever dom tag you want, or various tags, or even only the children
}
<div contentEditable id="your-editable-div" style="border: solid 1px black; padding: 2px; margin: 5px;">This is <b>an editable</b> div with html tags</div>
<button onclick="butclick()">replace html with other html</button>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

div contentEditable但Readonly

来自分类Dev

按钮和ContentEditable函数

来自分类Dev

如何读取contentEditable div的内容?

来自分类Dev

在ContentEditable Div内建立链接

来自分类Dev

如何读取contentEditable div的内容?

来自分类Dev

javascript contentEditable-包装交叉标记选择

来自分类Dev

HTML5-嵌套在contenteditable =“ true”中的contenteditable =“ false”

来自分类Dev

使用jQuery选择当前关注的contenteditable div

来自分类Dev

使用jQuery选择当前关注的contenteditable div

来自分类Dev

如何设置固定宽度的HTML contentEditable div

来自分类Dev

防止contenteditable在光标处设置样式

来自分类Dev

Firefox在contenteditable中插入换行符

来自分类Dev

当contenteditable成为焦点时删除选择

来自分类Dev

修改时contenteditable div的innerHTML值

来自分类Dev

检查contenteditable div是否为空

来自分类Dev

make a span within a contenteditable div uneditable

来自分类Dev

contenteditable =“ true” div字符数限制

来自分类Dev

contenteditable div中的内容为空

来自分类Dev

检查contenteditable div的输入是否为数字

来自分类Dev

高度通过contenteditable =“ true”自动增加div

来自分类Dev

使用contenteditable div获取并设置光标位置

来自分类Dev

contenteditable div上的字体大小更改

来自分类Dev

React: Getting the value of text inside a contentEditable div

来自分类Dev

使用mysqli从contentEditable div保存数据

来自分类Dev

反应:在contentEditable div中获取文本的值

来自分类Dev

用contenteditable =“ false”设置div样式

来自分类Dev

如果<p contenteditable>增大,则让<div>增大

来自分类Dev

如何使用Svelte在doubleclick上使<div> contentEditable?

来自分类Dev

使用受控输入来反应contentEditable div

Related 相关文章

热门标签

归档