需求:能返回/打印当前块的内容。
相关帖子
-
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 更新了该回帖 -
然后呢?什么时候获取代码块的内容?
比如,获取代码块的内容这样就可以
getCursorElement().closest('[data-type][data-node-id]').querySelector(".hljs").children[1].textContent
或者 用 Lute
Lute.New().BlockDOM2Content(getCursorElement().closest('[data-type][data-node-id]').outerHTML)
2 回复1 操作wilsons 在 2024-09-18 21:44:26 更新了该回帖 -
JeffreyChen • • 1 评论
删除这个块后重新插入包含语言信息的块
块 ID 有办法保持不变吗?(p.s. 不过考虑到场景,变了影响也不大)
先找到块,创建在下面,然后删除之前找到的块zxkmm •