在 JavaScript DOM 中拆分节点内容 -
Splitting node content in JavaScript DOM -
这个现有的答案是一段优秀的代码,几乎可以做到我想要的。 就像问题中的 OP 一样,我希望拆分 HTML 标签,但基于标签而不是偏移量,并由不应拆分的项目限制。
也就是说,我想把这个转过来:
<p>
<strong>hi there, how <em>are <span>y<!--break-->ou</span> doing</em> today?</strong>
</p>
进入这个:
<p>
<strong>hi there, how <em>are <span>y</span></em></strong>
<!--break-->
<strong><em><span>ou</span> doing</em> today?</strong>
</p>
我仍然在思考javascript,所以当我玩了一下@Hemlock提供的jsbin时,我无法让它做我想要的事情。
给出的答案是:
function splitNode(node, offset, limit) {
var parent = limit.parentNode;
var parentOffset = getNodeIndex(parent, limit);
var doc = node.ownerDocument;
var leftRange = doc.createRange();
leftRange.setStart(parent, parentOffset);
leftRange.setEnd(node, offset);
var left = leftRange.extractContents();
parent.insertBefore(left, limit);
}
function getNodeIndex(parent, node) {
var index = parent.childNodes.length;
while (index--) {
if (node === parent.childNodes[index]) {
break;
}
}
return index;
}
不需要范围,您只需要复制所有剪切元素并移动它们的子元素:
function splitOn(bound, cutElement) {
// will divide the DOM tree rooted at bound to the left and right of cutElement
// cutElement must be a descendant of bound
for (var parent = cutElement.parentNode; bound != parent; parent = grandparent) {
var right = parent.cloneNode(false);
while (cutElement.nextSibling)
right.appendChild(cutElement.nextSibling);
var grandparent = parent.parentNode;
grandparent.insertBefore(right, parent.nextSibling);
grandparent.insertBefore(cutElement, right);
}
}
(JSFIDDLE 演示(
您可以通过考虑如何将内容拆分为数组,然后将字符串连接在一起来构建自己的拆分函数。
这个答案的问题在于它不会开始/或完成任何拆分标签,就像在您的情况下一样,是 SPAN 元素。
<script>
var content = document.getElementById('content');
var elements = document.getElementsByTagName('strong');
var array = element.split("<!--break-->");
var string = '';
for(var i = 0; i < array.length; i++) {
string += '<strong>' + sarray[i] + "</strong>';
}
content.innerHTML = string;
</script>
<div id="content">
<strong>hi there, how <em>are <span>y<!--break-->ou</span> doing</em> today?</strong>
</div>
相关文章:
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- d3基于用户选择动态更新节点
- 拆分单词jquery
- 有条件更新d3.js力图中节点的最佳方法
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 如何处理node.js节点mongodb中的连接和查询队列
- 将DOM节点值与字符串Javascript进行比较
- 节点fs.stat名称未定义
- 无法安装节点sass相关性
- 拆分文本节点
- Webpack 在目标节点时忽略代码拆分
- 在 JavaScript DOM 中拆分节点内容 -
- 如何拆分单片节点.js javascript
- 拆分文本节点在中间
- javascript将层次树拆分为所有子树,并按级别对每个子树的节点进行分组