// ==UserScript==
// @name AC-baidu的搜索引擎样式再优化,对视觉中心优化-------请额外下载AC-baidu,此功能在AC-baidu基础上进行样式优化.
// @namespace http://tampermonkey.net/
// @version 1.6
// @description 百度第一页查询csdn橙色,知乎蓝色,豆瓣绿色,百度灰色
// @author 白水
// @match https://www.baidu.com/s?*
// @match https://*/search?*
// @grant none
// @require https://code.jquery.com/jquery-3.5.1.js
// @home-url https://greasyfork.org/zh-CN/scripts/418404
// ==/UserScript==
//--------------常用封装--------------------
//写入JQuery 3.5.1
//(function(url) { document.body.appendChild(document.createElement('script')).src = url; })("https://code.jquery.com/jquery-3.5.1.js");
//var $;//不能写入
//写入以下的var,太多方法没啥必要
//(function(textContent) { document.body.appendChild(document.createElement('script')).textContent = textContent; })(usefulVar);
//--------------定义--------------
var host = window.location.host, //host
href = window.location.href; //href
/** get 指定JS querySelector的对象,返回一个对象
* @param {*} querySelector JS 选择器
*/
function getByQuerySelector(querySelector) {
if (!document.querySelector(querySelector)) return false;
return document.querySelector(querySelector);
}
/** get 指定id属性值的对象,返回一个对象
* @param {*} Id
*/
function getById(Id) {
if (!document.getElementsById(Id)) return false;
return document.getElementsById(Id);
}
/**get 指定TagName的对象 ,返回一个数组
* @param {*} TagName 指定tag的对象
*/
function getByTagNameArr(TagName) {
if (!document.getElementsByTagName(TagName)) return false;
return document.getElementsByTagName(TagName);
}
/** get 指定Name属性的对象,返回一个数组
* @param {*} Name 指定Name的对象
*/
function getByNameArr(Name) {
if (!document.getElementsByName(Name)) return false;
return document.getElementsByName(Name);
}
/** get 指定ClassName的对象,返回一个数组//仅仅缩写
* @param {*} ClassName 类名称
*/
function getByClassNameArr(ClassName) {
if (!document.getElementsByClassName(ClassName)) {
console.log("getByClassNameArr Error 无法使用");
return document.getElementsByClassName(ClassName);
} //几乎百分百不会触发???
else if (document.getElementsByClassName.length == 0) {
console.log("错误:CRemove不存在;返回值:" + document.getElementsByClassName(ClassName) + "参数:" + ClassName);
return document.getElementsByClassName(ClassName);
} else {
return document.getElementsByClassName(ClassName);
}
}
/** get 筛选指定ClassName,利用getByClassNameArr数组返回一个数组
* @param {*} ClassName 类名称
*/
function getClassUniqueArr(ClassName) {
var oElements = getByClassNameArr(ClassName),
boxArr = new Array();
for (var i = 0, len = oElements.length; i < len; i++) {
if (oElements[i].className == ClassName) {
boxArr.push(oElements[i]);
}
}
return boxArr;
}
function QRemove(querySelector) {
if (!getByQuerySelector(querySelector)) console.log("错误:QRemove不存在;返回值:" + getByQuerySelector(querySelector) + "参数:" + querySelector);
else getByQuerySelector(querySelector).remove();
}
function CRemove(ClassName) {
if (getByClassNameArr(ClassName).length == 0) console.log("错误:CRemove不存在;返回值:" + getByClassNameArr(ClassName) + "参数:" + ClassName);
else if (getByClassNameArr(ClassName).length == 1) getByClassNameArr(ClassName)[0].remove(); //唯一
else {
console.log("提示:CRemove不唯一;返回值:" + getByClassNameArr(ClassName) + "参数:" + ClassName);
ArrRomve(getByClassNameArr(ClassName));
}
}
function ParentRemoveByCRemove(ClassName) {
if (getByClassNameArr(ClassName).length == 0) console.log("错误:ParentRemoveByCRemove不存在;返回值:" + getByClassNameArr(ClassName) + "参数:" + ClassName); //居然回传了个自己,淦了
else if (getByClassNameArr(ClassName).length == 1) getByClassNameArr(ClassName)[0].parentElement.remove(); //唯一
else {
console.log("提示:ParentRemoveByCRemove不唯一;返回值:" + getByClassNameArr(ClassName) + "参数:" + ClassName);
for (var i = getByClassNameArr(ClassName).length - 1; i > 0; i--) {
getByClassNameArr(ClassName)[i].parentElement.remove();
}
}
}
/** 倒序遍历删除编辑按钮
* @param {*} getByArr getBy系列Arr
*/
function ArrRomve(Arr) {
if (Arr.length == 0) console.log("错误:ArrRomve不存在;返回值:" + ArrRomve(Arr) + "参数:" + Arr);
else {
for (var i = Arr.length - 1; i > 0; i--) {
Arr[i].remove();
}
}
}
/*
Element.prototype.remove = function() {
// 像那些属性节点,注释节点,文本节点等等根本不可能做父节点,所以可以说parentNode返回的一般都是父元素节点====一直没有判断这个节点是否存在
//if (!this) return false;
//if (!this.parentNode) return false;
this.parentNode.removeChild(this); //父元素节点里删除调用者
};
*/
/*
HTMLCollection.prototype.remove = function() {
// 像那些属性节点,注释节点,文本节点等等根本不可能做父节点,所以可以说parentNode返回的一般都是父元素节点====一直没有判断这个节点是否存在
//if (this) return false; //HTMLCollection [] 必定存在
if (this.length == 0) return false; //不存在
//if (!this.parentNode) return false;
this.parentNode.removeChild(this); //父元素节点里删除调用者
};
*/
//--------------Function--------------
//--------------常用封装--------------------
(function() {
'use strict';
//运行逻辑 host.includes (t/f) func(){ (remove,ColorChange)}
//搜索主页_主程序
function SearchIndex() {
//百度搜索
function baidu() {
QRemove("#content_right"); //删除右边推荐栏目
QRemove("#s_tab"); //头部删除
QRemove("#foot"); //脚注去除
QRemove("#rs"); //相关搜索去除???去除之可能会出现不会自动翻页的情况
if (getByQuerySelector("#container")) { getByQuerySelector("#container").style.padding = "110px"; } //头部距离改为110px
if (getByQuerySelector("#container > div.head_nums_cont_outer.OP_LOG.new_head_nums_cont_outer > div > div.nums.new_nums > span")) { getByQuerySelector("#container > div.head_nums_cont_outer.OP_LOG.new_head_nums_cont_outer > div > div.nums.new_nums > span").style.color = "black"; } //搜索数量改为黑色
//保留百科/翻译/贴吧
function baiduArrRomve(getByArr) {
if (getByArr.length == 0) return console.log(getByArr + "不存在");
//倒序遍历删除编辑按钮
//xpath-log.children[0] == "H3"; 普通op.children[0] == "DIV" 普通op.children[0].children[0] == "H3".
for (var i = getByArr.length - 1; i >= 0; i--) {
//使用else if可以不写continue,if是无论如何都继续执行
if (getByArr[i].children[0].innerText.includes("其他人还在搜")) getByArr[i].remove();
else if (getByArr[i].children[0].innerText.includes("百度百科"));
else if (getByArr[i].children[0].innerText.includes("百度翻译"));
else if (getByArr[i].children[0].innerText.includes("百度贴吧"));
else getByArr[i].remove();
}
}
console.log("准备变颜色");
baiduArrRomve(getByClassNameArr("result-op")); //删除百度产品
}
//谷歌搜索
function google() {
//冰雪奇缘参考 https://www.google.com/search?q=%E5%86%B0%E9%9B%AA%E5%A5%87%E7%BC%98
console.log("google");
QRemove("#botstuff"); //相关
CRemove("yp1CPe"); //电影推荐
ParentRemoveByCRemove("HD8Pae"); //删除Video,占大部分的还是youtube
//CRemove("liYKde"); //删除右侧栏
if (getByClassNameArr("sfbg")[0]) getByClassNameArr("sfbg")[0].style.background = "rgba(255, 255, 255, 0.5)"; //顶部搜索半透明化
if (getByClassNameArr("yg51vc")[0]) getByClassNameArr("yg51vc")[0].style.background = "rgba(255, 255, 255, 0.5)"; //顶部more搜索半透明化
}
//必应搜索
function bing() {
if (document.querySelector("#b_header")) document.querySelector("#b_header").style.background = "rgba(255, 255, 255, 0.5)"; //头部透明
ParentRemoveByCRemove("b_rs"); //删除相关搜索test
//CRemove("b_rs"); //删除相关搜索test
//CRemove("b_ans"); //删除相关搜索
}
//改变颜色
function ColorChange(childrenClassName, parentClassName) {
var SearchUrlArr = [
{ name: "CSDN|csdn", color: "rgb(252,180,62,0.5)" },
{ name: "简书|jianshu", color: "rgb(229,96,72,0.5)" },
{ name: "知乎|zhihu", color: "rgb(65,105,225,0.5)" },
{ name: "博客园|cnblogs", color: "rgb(240,0,0,0.5)" },
{ name: "豆瓣|douban", color: "rgb(46,139,87,0.5)" },
{ name: "百度|baidu", color: "rgb(165,165,165,0.5)" },
{ name: "腾讯|qq", color: "rgb(165,165,165,0.5)" },
{ name: "搜狐|sohu", color: "rgb(165,165,165,0.5)" },
{ name: "163.com|网易", color: "rgb(165,165,165,0.5)" },
{ name: "github|Github", color: "rgb(0,0,0,0.5)" },
{ name: "gitee|码云", color: "rgb(0,0,0,0.5)" },
{ name: "oschina|开源中国", color: "rgb(0,0,0,0.5)" },
{ name: "stackoverflow|栈溢出", color: "rgb(0,0,0,0.5)" },
{ name: "smzdm|值得买", color: "rgb(165,165,165,0.5)" },
{ name: "taobao|淘宝", color: "rgb(165,165,165,0.5)" },
{ name: "tmall|天猫", color: "rgb(165,165,165,0.5)" },
{ name: "jd.com|京东", color: "rgb(165,165,165,0.5)" },
];
//定义子元素集合
//可以先使用getArr而非指定某种标签
var c = getByClassNameArr(childrenClassName),
p; //位置不定, 通过for循环获得p
for (var i = 0, ilen = c.length; i < ilen; i++) {
//向上查找, 指定[自身?]父元素,百度才需要查找父元素???
if (c[i].parentNode.className === parentClassName) {
p = c[i].parentNode;
//console.log("1");
} else if (c[i].parentNode.parentNode.className === parentClassName) {
p = c[i].parentNode.parentNode;
//console.log("2");
} else if (c[i].parentNode.parentNode.parentNode.className === parentClassName) {
p = c[i].parentNode.parentNode.parentNode;
//console.log("3");
} else if (c[i].parentNode.parentNode.parentNode.parentNode.className === parentClassName) {
p = c[i].parentNode.parentNode.parentNode.parentNode;
//console.log("4");
} else {
p = c[i].parentNode;
//console.log("1");
console.log(c + "找不到父元素");
}
//p.style.background = "rgb(255,255,255,0.5)"
for (var j = 0, jlen = SearchUrlArr.length; j < jlen; j++) {
if (RegExp(SearchUrlArr[j].name).test(c[i].textContent)) {
//使用 innerText innerHtml 而非 text???? nocde.textContent
p.style.background = SearchUrlArr[j].color;
//console.log("j--1");
break;
}
if (j == jlen - 1) {
//console.log("j--2");
p.style.background = "rgb(255,255,255,0.5)";
break;
}
}
//console.log("j--3");
/*
if (j == jlen) {
//恒等于最后一次输出即为 j=jlen;
//p.style.background = "rgb(255,255,255,0.5)";
}
*/
}
}
if (host.includes("baidu")) {
baidu();
ColorChange("c-showurl c-color-gray", "result c-container new-pmd");
} else if (host.includes("google")) {
google();
ColorChange("rc", "g");
} else if (host.includes("bing")) {
bing();
ColorChange("b_attribution", "b_algo");
} else {
console.log("不存在");
}
}
//主程序 延迟
//window.onload = function() { setTimeout(SearchIndex(), 0); };
//jQuery预载画面
var $ = jQuery.noConflict(true);
$(document).ready(SearchIndex());
})();