[js] 快速改样式 - 修改了一下能保存

//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; }); })();
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25825 引用 • 106917 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 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; /* 高亮时的文字颜色,白色 */ }

推荐标签 标签

  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 579 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    198 引用 • 543 回帖 • 5 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    91 引用 • 122 回帖 • 621 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 765 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9906 引用 • 45017 回帖 • 78 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 257 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    227 引用 • 476 回帖 • 1 关注
  • Word
    13 引用 • 41 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 91 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 636 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖 • 1 关注
  • abitmean

    有点意思就行了

    34 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 250 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 487 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 727 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 199 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 1 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 109 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 272 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 64 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 741 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 501 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 370 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖