获取当前文档对象
获取当前文档对象
// pc
siyuan.layout.centerLayout.children.map(item=>item.children.find(item=>item.headElement?.classList.contains('item--focus') && (item.panelElement.closest('.layout__wnd--active')||item.panelElement.closest('[data-type="wnd"]')))).find(item=>item)
获取当前文档的protyle
function getProtyle() {
try {
if(document.getElementById("sidebar")) return siyuan.mobile.editor.protyle;
const currDoc = siyuan?.layout?.centerLayout?.children.map(item=>item.children.find(item=>item.headElement?.classList.contains('item--focus') && (item.panelElement.closest('.layout__wnd--active')||item.panelElement.closest('[data-type="wnd"]')))).find(item=>item);
return currDoc?.model.editor.protyle;
} catch(e) {
console.error(e);
return null;
}
}
获取当前文档元素
document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none)')||document.querySelector('[data-type="wnd"] .protyle:not(.fn__none)');
//或
getProtyle().wysiwyg.element;
获取当前元素文档id
getProtyle()?.element?.querySelector('.protyle-title')?.dataset?.nodeId;
//或
(document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none)')||document.querySelector('[data-type="wnd"] .protyle:not(.fn__none)'))?.querySelector('.protyle-title')?.dataset?.nodeId;
获取当前文档编辑器元素
document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none) .protyle-wysiwyg.protyle-wysiwyg--attr')
注意: 这种方法不适合分屏情况,这种情况可参考 js获取鼠标所在元素
通过当前protyle data-id和tab data-id获取 protyle对象实例
function getInstanceById(id, layout = window.siyuan.layout.centerLayout) {
const _getInstanceById = (item, id) => {
if (item.id === id) {
return item;
}
if (!item.children) {
return;
}
let ret;
for (let i = 0; i < item.children.length; i++) {
ret = _getInstanceById(item.children[i], id);
if (ret) {
return ret;
}
}
};
return _getInstanceById(layout, id);
}
使用示例:
getInstanceById('d428018f-82e8-4f7a-9c06-c3d192517b2d')
获取当前tab
document.querySelector('[data-type="wnd"].layout__wnd--active .layout-tab-bar li.item--focus')||document.querySelector('[data-type="wnd"] .layout-tab-bar li.item--focus');
