代码片段:表头固定居中,而其他单元格可以自由手动修改对齐方式

找 AI 帮忙改的,不知道是不是最优的方案。


为了实现表头固定居中,而其他单元格可以通过鼠标右键手动修改对齐方式,我们需要结合 CSS 和 JavaScript 来实现。以下是修改后的代码:

CSS 部分

.protyle-wysiwyg .table {
    font-size: 24px;
    margin: 0 auto; /* 添加这一行 */
}

.protyle-wysiwyg > div.table > div:nth-child(1) > table > thead {
    text-align: center;
}

/* 表格表头样式 */
.b3-typography table thead th, .b3-typography table thead td, .protyle-wysiwyg table thead th, .protyle-wysiwyg table thead td {
    font-weight: 400;
    background-color: var(--b3-theme-background);
    text-align: center; /* 确保表头单元格居中对齐 */
}

/* 表格宽度自适应 */
.b3-typography table, .protyle-wysiwyg table {
    width: auto;
    display: table;
    margin: 0 auto; /* 添加这一行 */
}

JavaScript 部分

document.addEventListener('contextmenu', function(event) {
    // 阻止默认的右键菜单
    event.preventDefault();

    // 检查点击的目标是否是表格单元格
    if (event.target.tagName === 'TD' && event.target.closest('.protyle-wysiwyg .table')) {
        // 提示用户选择对齐方式
        const alignOptions = ['left', 'center', 'right'];
        const align = prompt('请选择对齐方式(输入 left、center 或 right):', 'left');
        if (alignOptions.includes(align)) {
            // 将选择的对齐方式应用到单元格
            event.target.style.textAlign = align;
        } else {
            alert('无效的对齐方式,请输入 left、center 或 right。');
        }
    }
});

解释

  1. CSS 部分:确保表头单元格居中对齐。
  2. JavaScript 部分:监听右键点击事件,当点击目标是表格单元格时,提示用户选择对齐方式(左对齐、居中对齐或右对齐),并将选择的对齐方式应用到单元格。

这样,表头单元格将固定居中对齐,而其他单元格可以通过鼠标右键手动修改对齐方式。

  • 思源笔记

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

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

    22250 引用 • 88929 回帖
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1792 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 文档刷新之后样式会保留吗?

    2 回复
  • xnyshu

    刚刚试了,可以保留。

    1 回复
  • xnyshu

    这个 AI 的代码能力不亚于 OpenAI,你们都用过没:

    DeepSeek

    1 回复
  • 之前免费的时候用过,要花钱了我就用回 gpt3.5 了

  • Fighter93

    我试了核心代码.style.textAlign,样式没保留

    1 回复
  • Kitty

    计算机小白想请教个类似的问题

    想问个很小白的问题,想问问这个 js 代码应该放在哪个文件夹上(我自己是把 js 代码放在了..\conf\appearance\themes\Savor\theme.js 上),也就是我把他放在了 savor 主题上。然后我放的 js 代码是(css 代码没有展示),然后我自己测试了代码没问题,但是我挂在 savor 主题的 theme.js 上却不大行耶

        document.addEventListener("DOMContentLoaded", function() {
                var contentDiv = document.getElementById("content");
                // 添加 span 的快捷键处理
                document.addEventListener("keydown", function(event) {
                    if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === "L") {
                        addSpanToSelection();
                        event.preventDefault();
                    }
                });
    
                // 删除 span 的快捷键处理
                document.addEventListener("keydown", function(event) {
                    if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === "K") {
                        removeSpanFromSelection();
                        event.preventDefault();
                    }
                });
    
                function addSpanToSelection() {
                    var selection = window.getSelection();
                    var selectedText = selection.toString().trim();
    
                    if (selectedText !== "") {
                        var span = document.createElement("span");
                        span.textContent = selectedText;
                        span.classList.add("highlight"); // 添加高亮样式类,可选
                        span.setAttribute("data-custom", "your-custom-value"); // 设置自定义属性
    
                        var range = selection.getRangeAt(0);
                        range.deleteContents();
                        range.insertNode(span);
                    }
                }
    
                function removeSpanFromSelection() {
                    var selection = window.getSelection();
                    var range = selection.getRangeAt(0);
                    var container = range.commonAncestorContainer;
    
                    // 检查是否选中了 span 元素
                    if (container.nodeType === 3) {
                        container = container.parentNode; // 如果是文本节点,取其父节点
                    }
    
                    if (container.tagName === "SPAN" && container.classList.contains("highlight")) {
                        var textNode = document.createTextNode(container.textContent);
                        container.parentNode.replaceChild(textNode, container);
                    }
                }
            });
    
    1 回复
  • 设置 - 外观 - 代码片段 - JS

    2 回复
  • Kitty

    啊啊啊啊,我现在才知道可以这样整,以前只知道这样搞 css

  • Kitty

    多谢多谢大佬

  • xnyshu

    没保留是什么意思?刷新后没变啊。

    1 回复
  • Fighter93

    就是没有写进数据中,笔记刷新后,还是居左。

    2 回复
  • xnyshu

    我刷新后没变。

  • xnyshu

    你说的应该是数据库表格,确实刷新后回还原。

    我试的是纯表格,改了对齐之后,刷新不会还原。

请输入回帖内容 ...