您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replaces jQuery, which causes lots of conflicts, with a framework that is largely cross-compatible
当前为
此脚本不应直接安装,它是供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/37273/242608/Underdollar%20jQuery%20replacement.js
// ==UserScript== // @name Underdollar jQuery replacement // @namespace https://greasyfork.org // @include https://sellers.shopgoodwill.com/sellers/newAuctionItem-catsel.asp* // @include https://sellers.shopgoodwill.com/sellers/reviewItem-label.asp* // @include https://sellers.shopgoodwill.com/sellers/reviewItem-label.asp?state=2 // @version 1.0.0.1 // @description Replaces jQuery, which causes lots of conflicts, with a framework that is largely cross-compatible // @grant none // ==/UserScript== class underdollar { constructor(selector) { this.is_$ = true; var singleNode = (function () { // make an empty node list to inherit from var nodelist = document.createDocumentFragment().childNodes; // return a function to create object formed as desired return function (node) { return Object.create(nodelist, { '0': {value: node, enumerable: true}, 'length': {value: 1}, 'item': { "value": function (i) { return this[+i || 0]; }, enumerable: true } }); // return an object pretending to be a NodeList }; }()); if (arguments.length < 1 || typeof selector == 'undefined') { this.nodeList = 'empty'; } else { if (selector instanceof Element) { this.nodeList = singleNode(selector); } else if (selector instanceof NodeList || selector instanceof HTMLCollection) { this.nodeList = selector; } else { console.dir(selector); this.nodeList = document.querySelectorAll(selector); } this.selector = selector; } Array.prototype.forEach.call(document.querySelectorAll('.udTempClassSelector'), function(el) { el.classList.remove('.udTempClassSelector'); }); this.length = this.nodeList.length; } // selection functions parent() { if (this.nodeList instanceof NodeList) { var myParent = this.nodeList[0].parentNode; return _$(myParent); } } children() { return _$(this.nodeList[0].children); } first() { if (this.nodeList instanceof NodeList) { return _$(this.nodeList[0]); } else { return _$(this.selector); } } last() { if (this.nodeList instanceof NodeList) { var length = this.nodeList.length; return _$(this.nodeList[length-1]); } else { return _$(this.selector); } } contents() { // var frame = document.getElementById('myframe'); // var c = frame.contentDocument || frame.contentWindow.document; return this.nodeList[0].contentDocument || this.nodeList[0].contentWindow.document; } // display functions css(arg1, arg2){ var me = this; if (typeof arg1 == 'string' && typeof arg2 == 'string') { Array.prototype.forEach.call(this.nodeList, function(el){ el.style[arg1] = arg2; }); } else if (arg1 instanceof Object) { Array.prototype.forEach.call(this.nodeList, function(el) { _$().each(arg1, function(styleName, styleValue) { el.style[styleName] = styleValue; }); }); } return _$(this.selector); } hide() { this.css('display', 'none'); return _$(this.selector); } show() { this.css('display', ''); return _$(this.selector); } toggle() { if (this.nodeList instanceof NodeList) { this.each(function(el){ if (el.style.display == 'none') { el.style.display = ''; } else { el.style.display = 'none'; } }); } return _$(this.selector); } // DOM functions before(htmlString) { this.each(function(el){ el.insertAdjacentHTML('beforebegin', htmlString); }); return _$(this.selector); } after(htmlString) { this.each(function(el){ el.insertAdjacentHTML('afterend', htmlString); }); return _$(this.selector); } append(something) { if (something instanceof Element) { this.each(function(el) { // how to function with appending one existing thing when there are multiple things to append to?? el.appendChild(something); }); } else if (something instanceof NodeList) { Array.prototype.forEach.call(something, function(el) { this.append(something); }); } else if (typeof something == 'string') { this.each(function(el) { var newEl = document.createElement('text'); newEl.innerHTML = something; el.appendChild(newEl) }); } else if (something.hasOwnProperty('is_$')) { if (something.nodeList.length == 1) { this.each(function(el) { // how to function with appending one existing thing when there are multiple things to append to?? el.appendChild(something.nodeList[0]); }); } else if (something.nodeList.length > 1) { this.each(function(el) { // how to function with appending one existing thing when there are multiple things to append to?? //el.appendChild(something.nodeList[0]); Array.prototype.forEach.call(something.nodeList, function(myNode, nodeIndex) { el.appendChild(myNode); }); }); } } return _$(this.selector); } prepend(something) { if (something instanceof Element) { this.each(function(el) { // how to function with appending one existing thing when there are multiple things to append to?? el.insertBefore(something, el.firstChild); }); } else if (something instanceof NodeList) { Array.prototype.forEach.call(something, function(el) { this.append(something, el.firstChild); }); } else if (typeof something == 'string') { this.each(function(el) { var newEl = document.createElement('text'); newEl.innerHTML = something; el.insertBefore(newEl, el.firstChild) }); } else if (something.hasOwnProperty('is_$')) { if (something.nodeList.length == 1) { this.each(function(el) { // how to function with appending one existing thing when there are multiple things to append to?? el.insertBefore(something.nodeList[0], el.firstChild); }); } else if (something.nodeList.length > 1) { this.each(function(el) { // how to function with appending one existing thing when there are multiple things to append to?? Array.prototype.forEach.call(something.nodeList, function(myNode, nodeIndex) { el.insertBefore(myNode, el.firstChild); }); }); } } return _$(this.selector); } remove() { this.each(function(el) { // how to function with appending one existing thing when there are multiple things to append to?? el.parentNode.removeChild(el); }); } // other element property/content functions attr(arg1, arg2) { if (arguments.length < 2) { return _$(this.selector).first().getAttribute(arg1); } else { this.each(function(el) { el.setAttribute(arg1, arg2); }); return _$(this.selector); } } text(textString) { if (arguments.length < 1) { var myVal = ''; this.each(function(el){ myVal += el.textContent; }); return myVal; } else { this.each(function(el){ el.textContent = textString; }); return _$(this.selector); } } html(arg1) { if (arguments.length < 1) { var myVal = ''; this.each(function(el){ myVal += el.innerHTML; }); return myVal; } else { this.each(function(el){ el.innerHTML = arg1; }); return _$(this.selector); } } val(arg1) { if (arguments.length < 1) { if (this.length > 1) { var myVals = []; this.each(function(el){ myVals.push(el.value) }); return myVals; } else if (this.length == 1) { return this.nodeList[0].value; } } else { this.each(function(el){ el.value = arg1; }); return _$(this.selector); } } isVisible() { if (this.length == 1) { return this.nodeList[0].offsetWidth !== 0 && this.nodeList[0].offsetHeight !== 0; } else if (this.length == 1) { var numVisible = 0; this.each(function(el){ if (!(el.offsetWidth !== 0) || !(el.offsetHeight !== 0)) { numVisible++; } }); return numVisible; } } // function functions bind(eventName, fn) { Array.prototype.forEach.call(this.nodeList, function(el) { el.addEventListener(eventName, fn); }); } // utility functions filter(fn) { /* this.each(function(el){ if (fn(el)) { } });*/ return Array.prototype.filter.call(this.nodeList, fn); } each(arg1, arg2){ if (arg1 instanceof Object && arg2 instanceof Function) { for (var p in arg1) { if (arg1.hasOwnProperty(p)) { arg2(p, arg1[p]); } } } else if (this.nodeList instanceof Array || this.nodeList instanceof NodeList) { Array.prototype.forEach.call(this.nodeList, arg1); } return _$(this.selector); } iterateOverObject(obj, fn) { if (obj instanceof Object) { for (var p in obj) { if (obj.hasOwnProperty(p)) { fn(p, obj[p]); } } } return _$(this.selector); } } function _$(selector) { return new underdollar(selector); }