您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Sort by the italicized 'total' price on a Discogs release page instead of pre-shipping price
// ==UserScript== // @name Discogs - Sort by Total Price in Marketplace // @namespace https://greasyfork.org/en/scripts/461485 // @version 1.4 // @description Sort by the italicized 'total' price on a Discogs release page instead of pre-shipping price // @author Jon Uleis (@MovingToTheSun) // @match https://www.discogs.com/*sell*/* // @icon https://www.discogs.com/favicon.ico // @grant none // @license MIT // ==/UserScript== /*jshint esversion: 11 */ (function () { "use strict"; const priceSort = document.querySelector(".price_header .sortable_link_selected"); const ascending = priceSort?.title.includes("ascending"); function tableSort() { // continue only if we are sorting by price if (priceSort) { const rows = Array.from(document.querySelectorAll("tr[data-release-id]")); rows.sort((rowA, rowB) => { const priceA = getRowPrice(rowA); const priceB = getRowPrice(rowB); return ascending ? priceA - priceB : priceB - priceA; }); // append back to table in new order rows.forEach((row) => row.parentNode.appendChild(row)); // change title text document.querySelector(".price_header .link-text").innerText = "Total Price"; } } function getRowPrice(row) { // if there's no total price, get the original bold one const price = row.querySelector(".converted_price") || row.querySelector(".price"); // if the item is unavailable and we're sorting by lowest, push to bottom const weight = row.querySelector(".item_add_to_cart .button") || !ascending ? 0 : 9999999; // strip everything else out of the price text return parseFloat(price.textContent.replace(/[^0-9]/g, "")) + weight; } const pjaxContainer = document.querySelector("#pjax_container"); const observer = new MutationObserver((mutationsList) => { for (let mutation of mutationsList) { // run function again if we're ajax loading in another table of items // console.log(mutation.addedNodes); if ( mutation.type === "childList" && mutation.addedNodes.length && (mutation.addedNodes[1]?.nodeName === "TBODY" || mutation.addedNodes[3]?.nodeName === "TABLE") ) { tableSort(); } } }); observer.observe(pjaxContainer, { subtree: true, childList: true }); // first run tableSort(); })();