//https://ld246.com/article/1736423881249 原版出处 //参考https://ld246.com/article/1734443320794 //参考https://ld246.com/article/1736616348929 //参考上面的,机器人写了一下,不完美,能用。 //修改后:改变颜色后能自动保存(块更新功能的实例) (() => { const buttonGroup = document.createElement('div'); buttonGroup.classList.add('button-group'); buttonGroup.style.position = 'absolute'; buttonGroup.style.left = '10px'; buttonGroup.style.top = '10px'; const colors = [ { name: '人物E', background: 'var(--b3-card-warning-background)', color: 'var(--b3-card-warning-color)' }, { name: '点题R', background: 'var(--b3-card-info-background)', color: 'var(--b3-card-info-color)' }, { name: '话T', background: 'var(--b3-card-success-background)', color: 'var(--b3-card-success-color)' }, { name: '词Y', background: 'var(--b3-card-error-background)', color: 'var(--b3-card-error-color)' } ]; async function fetchSyncPost(url, data) { try { const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return await response.json(); } catch (error) { console.error('Fetch error:', error); throw error; } } async function sendUpdateRequest(nodeId, originalHtmlContent, newHtmlContent) { const appId = siyuan?.ws?.app?.appId || 'default-app-id'; // 提供默认值 let nowTime = new Date().getTime(); // 更新后的时间 const res = await fetchSyncPost("/api/transactions", { session: appId, app: appId, reqId: nowTime, transactions: [{ "doOperations": [{ action: "update", id: nodeId, data: newHtmlContent, // 更新后的 HTML 内容 (如果需要更新) }], "undoOperations": [{ action: "update", id: nodeId, data: originalHtmlContent, // 使用原始 HTML 内容 }] }] }); console.log(res); } colors.forEach(function (color, index) { const button = document.createElement('button'); button.textContent = color.name; button.addEventListener('click', async function () { const selection = window.getSelection(); if (selection.rangeCount > 0) { let currentNode = selection.anchorNode; let nodeId = null; while (currentNode) { if (currentNode.nodeType === Node.ELEMENT_NODE && currentNode.hasAttribute('data-node-id')) { nodeId = currentNode.getAttribute('data-node-id'); break; } currentNode = currentNode.parentNode; } console.log('找到的data-node-id是:', nodeId); const targetElement = document.querySelector(`div[data-node-id="${nodeId}"]`); console.log(targetElement); let originalHtmlContent = ""; // 用于保存原始 HTML 内容 let newHtmlContent; // 用于保存新的 HTML 内容 if (targetElement) { originalHtmlContent = targetElement.outerHTML; console.log("原来的html", originalHtmlContent); } else { console.error("未找到指定 data-node-id 的元素!"); return; } const range = selection.getRangeAt(0); const span = document.createElement('span'); span.style.backgroundColor = color.background; span.style.color = color.color; span.setAttribute('data-type', 'text'); span.textContent = range.toString(); range.surroundContents(span); newHtmlContent = targetElement.outerHTML; console.log("新的html", newHtmlContent); await sendUpdateRequest(nodeId, originalHtmlContent, newHtmlContent); } }); buttonGroup.appendChild(button); }); document.body.appendChild(buttonGroup); document.addEventListener('keydown', function (e) { if (e.ctrlKey) { const keyMap = { 'e': 0, 'r': 1, 't': 2, 'y': 3 }; const index = keyMap[e.key.toLowerCase()]; if (index !== undefined) { buttonGroup.children[index].click(); } } }); let startX; let startY; let isDragging = false; buttonGroup.addEventListener('mousedown', function (e) { isDragging = true; startX = e.clientX; startY = e.clientY; }); document.addEventListener('mousemove', function (e) { if (isDragging) { const dx = e.clientX - startX; const dy = e.clientY - startY; const rect = buttonGroup.getBoundingClientRect(); buttonGroup.style.left = `${rect.left + dx}px`; buttonGroup.style.top = `${rect.top + dy}px`; startX = e.clientX; startY = e.clientY; } }); document.addEventListener('mouseup', function () { isDragging = false; }); })();
[js] 快速改样式 - 修改了一下能保存
相关帖子
-
cxg318 • • 1 • 1 赞同作者
css 部分也修改了一下,选择按钮能变个色,按钮竖着排列
.button-group { position: fixed; top: 10px; left: 10px; display: flex; flex-direction: column; /*设置为垂直排列 */ cursor: move; user-select: none; } .button-group button { border: none; padding: 5px 10px; /*margin-right: 5px;*/ margin-bottom: 5px; /* 修改为下方间隔 */ } .button-group button:hover { background: linear-gradient(to right, #ff7e5f, #feb47b); /* 从左到右的渐变背景 */ color: white; /* 高亮时的文字颜色,白色 */ }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于