此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.icu/scripts/37273/242620/Underdollar%20jQuery%20replacement.js
您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
(我已经安装了用户样式管理器,让我安装!)
// ==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.3
// @description Replaces jQuery, which causes lots of conflicts, with a framework that is largely cross-compatible
// @grant none
// ==/UserScript==
console.log('squirrel...........');
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);
}