在SPAN内部插入HTML时拆分SPAN
Split SPAN when Inserting HTML Inside of it
我有一个设置,其中我有大量格式化为HTML的文本(包含标题和段落),所有这些都在contenteditable
div中。我设置了一个函数,可以在单击按钮时将自定义HTML实体<newnote>
插入到可编辑div中。这很好,只是当在跨度内插入音符时,我需要将跨度一分为二,并将<newnote>
放在它们之间。
我已经研究了网络上许多将文本插入DIV的函数,由于插入HTML是一项要求,所以document.createTextNode()
似乎是我唯一的选择。
这是我迄今为止设置的内容,它检查父级是否是SPAN,然后根据if语句放置不同的内容。
function insertNodeAtRange() {
var newRange = rangy.getSelection().getRangeAt(0);
var parentElement = newRange.commonAncestorContainer;
if (parentElement.nodeType == 3) {
parentElement = parentElement.parentNode;
}
var el = document.createElement('newnote');
el.className = "bold";
if (parentElement.tagName == 'SPAN') {
el.appendChild(document.createTextNode(" </span>Test<span> "));
} else {
el.appendChild(document.createTextNode(" Test "));
}
newRange.insertNode(el);
}
这是我的沙发
提前感谢您的帮助。。。
代码的主要问题是试图通过创建文本节点来生成/修改html。文本节点不会被解析为dom。
这应该对你有用:
JSFiddle
function insertNodeAtRange() {
var newRange = rangy.getSelection().getRangeAt(0);
var parentElement = newRange.commonAncestorContainer;
if (parentElement.nodeType == 3) {
parentElement = parentElement.parentNode;
}
var el = document.createElement('newnote');
el.className = "bold";
el.appendChild(document.createTextNode(" Test "));
newRange.insertNode(el);
if (parentElement.tagName == 'SPAN') {
var $newnote = $(el);
var $span1 = $("<span>");
var $span2 = $("<span>");
var left = true;
$parentElement = $(parentElement);
$parentElement.contents().each(function (i, node) {
if (node.isSameNode(el)) {
left = false;
} else if (left) {
$span1.append(node);
} else {
$span2.append(node);
}
});
$parentElement.replaceWith($newnote);
$span1.insertBefore($newnote);
$span2.insertAfter($newnote);
}
}
我只是直接插入newnote
元素,然后得到之前的东西并将其放入span1,得到之后的东西并放入span2,用newnote替换现有的span,并将新的span定位在newnote周围。
相关文章:
- 使用Clipboard.js复制span文本
- 拆分单词jquery
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 将字符串拆分为数组时出现JavaScript错误
- 在JavaScript中拆分日期字符串的更好方法是什么
- webpack代码拆分了handlerbs文件——结果是文件很大
- 如何将字符串拆分为字符,但在javascript中保留空格
- 简单地将拆分变量添加到对象中
- 换行符拆分返回“”;未定义”;
- 将字符串拆分为;只要它's不在»«
- 将<span样式>凯迪托
- 兰吉 |如何在 span 标签上使用单击事件删除突出显示的文本
- 使用 JavaScript 拆分名字和姓氏
- 当DIV中的文本高亮显示时,如何获得DIV中Span的值?(Javascript)
- Clear Case.如何在多行上拆分很长的javascript
- 在javascript中使用split函数希望在页面加载时拆分url
- 使用Javascript从整个网页中删除具有特定类的所有span标记
- Javascript/jQuery:用HTML span标记替换单引号中的文本
- Javascript和RegEx:拆分并保留分隔符
- 在SPAN内部插入HTML时拆分SPAN