Make table headers sticky

05/08/2025, 13:00:14

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

You will need to install an extension such as Tampermonkey to install this script.

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

Advertisement:

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

Advertisement:

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name        Make table headers sticky
// @namespace   Violentmonkey Scripts
// @match       https://*/wiki/*
// @match       https://techlore.tech/*
// @match       https://wiki.*/*
// @match       https://*freie-messenger*/*
// @grant       none
// @version     1.1
// @author      SHA
// @license     GNU GPLv3
// @description 05/08/2025, 13:00:14
// ==/UserScript==

// TODO: use jQuery and $(...).floatThead() instead because "display: sticky" doesn't work with "overflow-x: auto".

window.addEventListener("load", (event) => {

  setTimeout(() => {
    const tables = document.querySelectorAll("table:not(.infobox):not(.sidebar)"); // exclude fact sheets on wikipedia
    tables.forEach(table => {
      table.style.display = "table";
      const header = table.querySelector("tr:first-of-type");
      header.style.position = "sticky";
      header.style.top = "0";
      header.style.zIndex = "10000";
      const rowHeaders = table.querySelectorAll("tbody th");
      rowHeaders.forEach(th => {
        th.style.position = "sticky";
        th.style.left = "0";
        th.style.zIndex = "10000";
      });
    });

    // for https://techlore.tech/vpn/
    const grids = document.querySelectorAll("*[role=grid]");
    grids.forEach(grid => {
      grid.style.display = "initial";
      const header = grid.querySelector("*[role=rowgroup]:first-of-type");
      header.style.position = "sticky";
      header.style.top = "0";
      header.style.zIndex = "10000";
    });
  }, 500);
});