您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Filter results by country
// ==UserScript== // @name Ebay Country Filter // @namespace / // @include /^https://www.ebay(\.com?)?\.[a-z]{2,3}/sch/i.html.*$/ // @version 2.3 // @description Filter results by country // @run-at document-start // ==/UserScript== const string_compare = new Intl.Collator(undefined, {sensitivity: 'base'}).compare; var countries = new Set(); var countries_to_hide = new Set(); var results_loaded = 0; function create_country_filter_sidebar_div() { let country_filter_sidebar_div = document.createElement('li'); country_filter_sidebar_div.id = 'country_filter'; country_filter_sidebar_div.classList.add('x-refine__main__list'); country_filter_sidebar_div.innerHTML = ` <li class="x-refine__main__list "> <div role="button" class="x-refine__item--toggle" aria-controls="x-refine__Country_Filter" aria-expanded="true" onclick="this.setAttribute('aria-expanded', this.getAttribute('aria-expanded')==='false');" > <h3 class="x-refine__item">Country</h3> <div class="x-refine-toggle"> <svg focusable="false"><use xlink:href="#svg-icon-chevron-down"></use></svg> </div> </div> <div class="x-refine__group"> <ul id="Countries" class="x-refine__main__value" style="clear:both"></ul> </div> </li> `; return country_filter_sidebar_div; } function make_country_checkbox_object(country) { let country_li = document.createElement('li'); country_li.className = "x-refine__main__list--value"; country_li.dataset.country = country; country_li.innerHTML = ` <div class="x-refine__multi-select"> <a class="cbx x-refine__multi-select-link" data-country="${country}" onclick="filter_country(this);"> <input type="checkbox" class="cbx x-refine__multi-select-checkbox" checked> <span class="cbx x-refine__multi-select-cbx">${country}</span> </a> </div> `; if (countries_to_hide.has(country)) country_li.getElementsByTagName('input')[0].checked = false; return country_li; } function insert_country_checkbox_into_sidebar(country) { let country_filter_sidebar_div = document.getElementById('country_filter'); let country_filter_list = country_filter_sidebar_div.getElementsByTagName('ul')[0]; for (let existing_country_li of country_filter_list.children) { let existing_country = existing_country_li.dataset.country; // Compare country names alphabetically let order_comparison = string_compare(country, existing_country); // Skip adding already existing countries if (order_comparison === 0) return; // Found the correct position alphabetically if (order_comparison == -1) { let new_country_li = make_country_checkbox_object(country); country_filter_list.insertBefore(new_country_li, existing_country_li); return; } } // Add to the end if it hasn't already been added let new_country_li = make_country_checkbox_object(country); country_filter_list.appendChild(new_country_li); } function parse_item_country(item_country) { let item = item_country.closest('li.s-item'); let country = item_country.innerText.replace(/^[^ ]+ /, ''); if (countries.has(country)) { if (countries_to_hide.has(country)) item.style.display = 'none'; return; } countries.add(country); // Remember whether this country was hidden if (sessionStorage.getItem('country_filter/'+country) === 'unchecked') { countries_to_hide.add(country); item.style.display = 'none'; } insert_country_checkbox_into_sidebar(country); } function insert_country_filter_into_sidebar(mutations, self) { // Wait until sidebar has loaded let sidebar = document.getElementsByClassName('x-refine__left__nav') if (sidebar.length===0) return; sidebar = sidebar[0]; let country_filter_sidebar_div = create_country_filter_sidebar_div(); sidebar.insertBefore(country_filter_sidebar_div, sidebar.firstChild); observe(as_item_results_load); self.disconnect(); } function as_item_results_load(mutations, self) { // Get newly added item countries let item_countries = document.getElementsByClassName('s-item__itemLocation'); let new_item_countries = [...item_countries].slice(results_loaded); if (new_item_countries.length === 0) return; results_loaded = item_countries.length; for (let item_country of new_item_countries) parse_item_country(item_country); if (document.readyState === 'complete') self.disconnect(); } // Insert show/hide functions into document function insert_script_into_document(mutations, self) { if (document.body === null) return; let script = document.createElement('script'); script.innerHTML = ` function filter_country(a) { let country = a.dataset.country; let display; if (a.children[0].checked) show_country(country); else hide_country(country); } function show_country(country) { sessionStorage.setItem('country_filter/'+country, 'checked'); for (item_country of document.getElementsByClassName('s-item__itemLocation')) if (item_country.innerText.includes(country)) item_country.closest('li.s-item').style.display = 'block'; } function hide_country(country) { sessionStorage.setItem('country_filter/'+country, 'unchecked'); for (item_country of document.getElementsByClassName('s-item__itemLocation')) if (item_country.innerText.includes(country)) item_country.closest('li.s-item').style.display = 'none'; } `; document.body.append(script); self.disconnect(); } observe(insert_country_filter_into_sidebar); observe(insert_script_into_document); function observe(func) { new MutationObserver(func).observe(document, {childList:true, subtree:true}); }