需求:能返回/打印当前块的内容。
相关帖子
-
wilsons • • 2付费者 捐赠者
调用
getCursorElement().closest('[data-type]')
即可,多个块嵌套的仅获取最内层的块,比如 li task 等。function getCursorElement() { const selection = window.getSelection(); if (selection.rangeCount > 0) { const range = selection.getRangeAt(0); // 获取光标所在的元素 const cursorElement = getCursorElementRecursive(range.startContainer); return cursorElement; } return null; } function getCursorElementRecursive(node) { if (node.nodeType === Node.TEXT_NODE) { // 如果是文本节点,递归查找其父元素节点 return getCursorElementRecursive(node.parentElement); } else { // 如果是元素节点,直接返回 return node; } }
getCursorElementRecursive 这个也可以不用递归,一般文档结构中,文本节点的直接父节点通常是元素节点,而不是另一个文本节点。
所以,直接这样也可以,node.parentElement 本身就可以直接获取元素结点
function getCursorElementRecursive(node) { if (node.nodeType === Node.TEXT_NODE) { // 如果是文本节点,返回其父元素节点 return node.parentElement; } else { // 如果是元素节点,直接返回 return node; } }
-
调用
getCursorElement().closest('[data-type]')
即可,多个块嵌套的仅获取最内层的块,比如 li task 等。function getCursorElement() { const selection = window.getSelection(); if (selection.rangeCount > 0) { const range = selection.getRangeAt(0); // 获取光标所在的元素 const cursorElement = getCursorElementRecursive(range.startContainer); return cursorElement; } return null; } function getCursorElementRecursive(node) { if (node.nodeType === Node.TEXT_NODE) { // 如果是文本节点,递归查找其父元素节点 return getCursorElementRecursive(node.parentElement); } else { // 如果是元素节点,直接返回 return node; } }
getCursorElementRecursive 这个也可以不用递归,一般文档结构中,文本节点的直接父节点通常是元素节点,而不是另一个文本节点。
所以,直接这样也可以,node.parentElement 本身就可以直接获取元素结点
function getCursorElementRecursive(node) { if (node.nodeType === Node.TEXT_NODE) { // 如果是文本节点,返回其父元素节点 return node.parentElement; } else { // 如果是元素节点,直接返回 return node; } }
2 回复1 操作wilsons 在 2024-09-18 18:17:38 更新了该回帖 - 其他回帖
- 查看全部回帖