在JavaScript DOM中拆分节点内容
我有一个场景,我需要将节点拆分为给定的祖先,例如
hi there, how are you doing today?
需要分成:
hi there, how are y
和
ou doing today?
我该怎么做呢?
这是一个适用于使用Range
现代浏览器的解决方案。 使用TextRange
可以为IE <9做类似的事情,但我使用Linux,因此我无法轻松访问这些浏览器。 我不确定你想要的功能,返回节点或只是替换内联。 我只是猜了一下并做了替换内联。
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; }
演示: jsbin
它期望一个node
的TextNode
,尽管它可以使用一个Element
; 偏移量将根据Range.setStart的行为而有所不同
请参阅Text.splitText
方法。
不确定这对你有帮助,但这就是我想出来的……
将函数传递给您希望移动到的元素和节点标记名称字符串。
hi there, how are you doing today?