table-sorter

传统表格排序

2024/10/06のページです。最新版はこちら

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

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

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

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

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

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

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

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

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

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

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

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

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

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

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         table-sorter
// @namespace    https://greasyfork.org/
// @version      0.0.1
// @description  传统表格排序
// @author       HqLin
// @match        https://tfgames.site/*
// @grant        GM.setClipboard
// @grant        GM.addStyle
// @license      AGPLv3
// ==/UserScript==
'use strict';

(function () {
  document.querySelectorAll('table').forEach((tbl) => {
    const thead = tbl.querySelector('thead')
    const theads = tbl.querySelectorAll('thead th')
    const trows = tbl.querySelectorAll('tbody tr')
    if (trows.length === 0 || theads.length === 0 || !thead) return

    theads.forEach((head, idx) => head.dataset.index = idx)

    let sortingIdx = 0, reverse = false
    thead.addEventListener('click', (ev) => {
      const header = ev.target.closest('th')
      reverse = header.dataset.index === sortingIdx ? !reverse : false
      sortingIdx = header.dataset.index
      const tbody = tbl.querySelector('tbody')
      tbody.innerHTML = ''
      const trowsSorted = Array.from(trows).sort((rowA, rowB) => {
        const cellA = rowA.querySelectorAll('td')[sortingIdx]?.textContent
        const cellB = rowB.querySelectorAll('td')[sortingIdx]?.textContent
        const delta = cellA - cellB
        return (reverse ? -1 : 1) * (Number.isNaN(delta) ? cellA.localeCompare(cellB) : delta)
      })

      trowsSorted.forEach(row => tbody.appendChild(row))
    })
  })
})()