最近刚刚开始使用思源,在尝试使用思源的原生闪卡功能,但是标题制卡的行为似乎和我想象中的不太一样。
我以为的标题制卡:全选所有块,快速制卡,为所有标题生成卡片。
实际的标题制卡:全选所有块,快速制卡,为所有选中的块进行制卡。
我的需求是把所有问题都总结到一个文档中然后统一完成制卡,但是全选制卡会自动生成很多乱七八糟的卡,所以希望能够有个脚本可以快速选中所有标题然后快速制卡,考虑到可能有其他用途所以直接做成选中所有同类型的块了。
在论坛上大致搜索了一下并没有搜到类似的脚本,所以让 AI 帮忙写了个,顺便分享出来。
PS:本人不具备维护能力,如有功能 bug 或者需要进一步优化,还请论坛大佬出手 🙏
效果
代码
// 选中所有相同类型的元素
// 使用方法:按下 Alt + 右键点击任意元素选中所有相同类型的元素
(() => {
// 监听鼠标单击事件
document.addEventListener('mousedown', function(event) {
if (!event.altKey || event.button !== 2) return; // 确保按下 Alt 键并点击左键
// 获取被点击的元素
const clickedElement = event.target.closest('[data-type]'); // 查找最近的具有 data-type 属性的元素
if (!clickedElement) return; // 确保点击的是具有 data-type 属性的元素
const elementType = clickedElement.getAttribute('data-type'); // 获取元素的类型
// 获取 protyle 元素
const protyle = getProtyleByMouseAt(event);
const similarElements = protyle.querySelectorAll(`[data-type="${elementType}"]`); // 查找所有相同类型的元素
selectAllElements(similarElements); // 选中所有相同类型的元素
});
// 选中所有相同类型的元素
function selectAllElements(elements) {
elements.forEach(element => {
element.classList.add('protyle-wysiwyg--select'); // 添加选中样式
});
console.log(`已选中 ${elements.length} 个相同类型的元素`); // 打印已选中元素的数量
}
// 通过鼠标位置获取 protyle 元素
function getProtyleByMouseAt(event) {
const mouseX = event.clientX;
const mouseY = event.clientY;
// 调用 document.elementFromPoint 获取元素
const element = document.elementFromPoint(mouseX, mouseY);
if (element) return element.closest('.protyle');
return null;
}
})();
顺便问一下大家对于这种问答题一般都是怎么制卡的,总觉得自己打开方式似乎不是很对 😢
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于