您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Скрипт сортирует колонки по алфавиту, числам или дате.
// ==UserScript== // @name Сортировка промокодов в Тильде // @namespace https://bocmanbarada.ru/codes // @version 0.3 // @description Скрипт сортирует колонки по алфавиту, числам или дате. // @author bocmanbarada // @match https://tilda.ru/projects/payments/promocodes/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAACiklEQVR4nO2ZP2gUQRSHR4KCivEuKWwStYlCQBsRxUIQSWWhoFYBSSGWamMaC62CkFZQES0EUUglFqIiGCv/xByIihAhwUKsRAtRFP1k9B33MuTOndnZOKv7wZBjb2fm9zGZvbs3xvwvAMPAEWmbTRkBNgI/aHHblBFgnPl8B9aZMgEsBd6JwJySOWXKBLBPhR8BXsrrN0CXKQvADQn+GVgNnFZiQ6YMAGuArxJ6Qm38JtdNGQBOqND71fVpufYF6F2EHJPAkzwDNPfDR2C5uj6qBI/GCtwhxy9CO++gxSXnvX71ufIsVuCiRC4qkQNA3WmP1ftbo6ePIQKslH+nrJzznmSRREbw4wOwIkWRSRXyILClTdP3HUpKBBhQG3nGY+Xu5w0cW2Qs6/cpYBXwSe618gN5Q0cRAbrkO1STDRn6XFP3j+UNHUtkE3BX2uWMfXapPlfyBI6+2VODSiQxqFYkMahWJDGoViQxqFYkMcjxe2Q3cMGzDacochx/gn7u2sKGlJf6QkWAPuAFcC+GyHigyE3pP9NOhg4iImH7Wu74Tr4EuKokXgG1QBFbhn0o48wC67OKOBJPbXXHd/KTSsJWWwZDJLLKsIDIAhI9vpPulfMR5O+ePBJZZHBEYkgMOvWu0RgSjswjV0aLOBLTIRK9wGslMWH3SkyRdjK0yC2xzKlhTemidgEydZmj+TTDeT3lvbFl4PNqMHsM11+Iwfw5a059uUkj6CjDHhuoQeyhz85CkmeTaYRKDAHf1ECHC0ncOUOPPJn8n06qdPpeSZwtJGn2lamFdOwGniuJB3bDmzLB77LpLSXxVlan/ofWbVIC2EYYDZMSwPZ/RWQtcCagHfvb2StMgvwEXznT7KY/VwsAAAAASUVORK5CYII= // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; function addSortPromocode() { setTimeout(function() { const getCellValue = (tr, idx) => tr.children[idx].innerText.replace('%', '') || tr.children[idx].textContent.replace('%', ''); const comparer = (idx, asc) => (a, b) => ((v1, v2) => v1 !== '' && v2 !== '' && !isNaN(v1) && !isNaN(v2) ? v1 - v2 : v1.toString().localeCompare(v2))(getCellValue(asc ? a : b, idx), getCellValue(asc ? b : a, idx)); document.querySelectorAll('th').forEach(th => th.addEventListener('click', (() => { const table = th.closest('table'); Array.from(table.querySelectorAll('tbody tr')) .sort(comparer(Array.from(th.parentNode.children).indexOf(th), this.asc = !this.asc)) .forEach(tr => table.querySelector('tbody').appendChild(tr)); }))); }, 1000); } // Настройка MutationObserver const observerPromocodeTable = new MutationObserver((mutationsList) => { for (let mutation of mutationsList) { if (mutation.type === 'childList') { // Проверяем каждый добавленный узел for (let node of mutation.addedNodes) { if (node instanceof HTMLElement) { // Проверяем, является ли добавленный узел элементом, которого вы ищете if (node.classList.contains('promocode-inner')) { // Вызываем функцию при появлении элемента addSortPromocode(); console.log('Функция addSortPromocode() запущена'); } } } } } }); const targetPromocodeTable = document.body; const config = { childList: true, subtree: true }; observerPromocodeTable.observe(targetPromocodeTable, config); $('head').append(`' <style> .promocode-list thead th { cursor: pointer; } </style>'`); })();