如何获取文档片段中的所有文本节点
How can I get all text node in document fragment?
我得到用户选择的文本:
var selection = window.getSelection();
var selectRange = selection.getRangeAt(0);
var content = selectRange.cloneContents(); // DocumentFragment
如何获取DocumentFragment
内容中的textNode
?
使用textContent
var selection = window.getSelection();
var selectRange = selection.getRangeAt(0);
var content = selectRange.cloneContents(); // DocumentFragment
var text = content.textContent;
筛选fragment.childNodes
以获取文本节点:
const selection = window.getSelection();
const selectRange = selection.getRangeAt(0);
const fragment = selectRange.cloneContents(); // DocumentFragment
// Get the child nodes and filter them to only include text nodes
const textNodes = Array.from(fragment.childNodes).filter(child => child.nodeName === "#text");
结合一些技巧,很容易从任何容器节点(在本例中为片段)中提取文本节点。问题的片段部分与提取部分无关。
获取容器的所有子项,使用展开运算符将它们转换为"真正的"数组...
以便可以使用filter
。也可以跳过这部分,因为 HTMLCollection 确实支持forEach
因此可以在其中填充一个空数组。
请注意,Node.TEXT_NODE
是 DOM 常量,用于3
// create a demo fragment with some HTML mix of text nodes & elements
var frag = document.createRange().createContextualFragment("<a>1</a> 2 <b>3</b> 4.");
// now the work begins: get only the text nodes from the fragment
var textNodes = [...frag.childNodes].filter(node => node.nodeType == Node.TEXT_NODE)
// print the text nodes as an array
console.log( textNodes.map(node => node.textContent) )
相关文章:
- Javascript,将文本添加到具有现有文本节点的元素中
- 拆分文本节点
- 使用TreeWalker检索非Javascript文本节点
- JSTree's data.rslt.obj.text()返回一个文本数组,而不是所需节点的文本
- jquery在元素中查找文本节点,并使用标记进行连接和包装
- JavaScript 文本节点属性
- 如何在所有节点中获取页面的文本
- 根据类型更改 jstree 节点文本颜色
- 获取xml节点文本
- 如何在JavaScript中使用主节点文本对json对象进行排序
- 如何通过按钮单击和鼠标悬停/鼠标退出显示和隐藏节点文本?D3/JS.
- 在 jsTree 中,使节点文本可单击的最佳方法是什么(用于选中复选框)
- Javascript DOM,在不丢失间距信息的情况下获取节点文本
- 更改文本节点文本
- 正在更改jsTree中的节点文本
- 函数,用于比较DOM树中的两个节点文本
- 谷歌图表Sankey -节点文本样式
- 如何在JavaScript中将DOM节点文本值转换为UTF-8
- 不能改变js节点文本的颜色
- 如何在 arbor js 中为每个节点文本添加新行字符