您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
bangumi 目录名称搜索匹配,在添加新关联时输入名称可返回相应搜索
// ==UserScript== // @name bangumi_index_name_search // @namespace http://tampermonkey.net/ // @version 1.1.1 // @description bangumi 目录名称搜索匹配,在添加新关联时输入名称可返回相应搜索 // @author xdy // @include /https?:\/\/(bgm\.tv|bangumi\.tv|chii\.in)/index/* // @require http://code.jquery.com/jquery-latest.js // ==/UserScript== function addCSS(cssText){ var style = document.createElement('style'), //创建一个style元素 head = document.head || document.getElementsByTagName('head')[0]; //获取head元素 style.type = 'text/css'; //这里必须显示设置style元素的type属性为text/css,否则在ie中不起作用 if(style.styleSheet){ //IE var func = function(){ try{ //防止IE中stylesheet数量超过限制而发生错误 style.styleSheet.cssText = cssText; }catch(e){ } }; //如果当前styleSheet还不能用,则放到异步中则行 if(style.styleSheet.disabled){ setTimeout(func,10); }else{ func(); } }else{ //w3c //w3c浏览器中只要创建文本节点插入到style元素中就行了 var textNode = document.createTextNode(cssText); style.appendChild(textNode); } head.appendChild(style); //把创建的style元素插入到head中 } //使用 css = '\ .search_suggest \ {\ position:absolute;\ z-index:999;\ left:10px;\ top:106px;\ width:361px;\ border:1px solid #ccc;\ border-top:none;\ display:none;\ color:#004080;\ }\ .search_suggest li \ { height:24px;\ overflow:hidden;\ padding-left:3px;\ line-height:24px;\ background:#fff;\ cursor:default;\ }\n\ .search_suggest li.hover {background:#ddd;}'; addCSS(css); var type_str = ['', '书籍','动画','音乐','游戏','书籍','三次元']; $("a.add.thickbox").attr('href','#TB_inline?tb&height=80&width=360&inlineId=newIndexRelated'); var input = $("input#title"); input.attr('autocomplete','off'); input.after("<div class='search_suggest' id='search_suggest'><ul></ul></div>"); before_str = "<option value='2'>动画</option><option value='1'>书籍</option><option value='4'>游戏</option><option value='3'>音乐</option><option value='6'>三次元</option>"; input.before("<div><span class='tip'>或填入条目名称获得候选ID选项,右侧选择分类:</span><select name='cat' id='indexSearchSelect'><option value='all'>全部</option>"+before_str+"</div>"); var indexSelect = $('select#indexSearchSelect'); function oSearchSuggest(searchFuc) { //var input = $('#gover_search_key'); var suggestWrap = $('#search_suggest'); var key = ""; var init = function(){ input.bind('keyup',sendKeyWord); input.bind('blur',function(){setTimeout(hideSuggest,100);}); }; var hideSuggest = function(){ suggestWrap.hide(); }; //发送请求,根据关键字到后台查询 var sendKeyWord = function(event){ //键盘选择下拉项 if(suggestWrap.css('display')=='block'&&event.keyCode == 38||event.keyCode == 40) { var current = suggestWrap.find('li.hover'); if(event.keyCode == 38) { if(current.length>0) { var prevLi = current.removeClass('hover').prev(); if(prevLi.length>0) { prevLi.addClass('hover'); input.val(prevLi.attr('title')); } } else { var last = suggestWrap.find('li:last'); last.addClass('hover'); input.val(last.attr('title')); } } else if(event.keyCode == 40) { if(current.length>0) { var nextLi = current.removeClass('hover').next(); if(nextLi.length>0) { nextLi.addClass('hover'); input.val(nextLi.attr('title')); } } else { var first = suggestWrap.find('li:first'); first.addClass('hover'); input.val(first.attr('title')); } } //输入字符 } else { var valText = $.trim(input.val()); if(valText ==''||valText==key) { return; } var search_type = indexSelect.val(); searchFuc(valText, search_type); key = valText; } }; //请求返回后,执行数据展示 this.dataDisplay = function(data){ if(data.length<=0) { suggestWrap.hide(); return; } //往搜索框下拉建议显示栏中添加条目并显示 var li; var tmpFrag = document.createDocumentFragment(); suggestWrap.find('ul').html(''); for(var i=0; i<data.length; i++) { li = document.createElement('LI'); li.title = data[i].id; li.innerHTML = type_str[data[i].type] + ':' + data[i].name; tmpFrag.appendChild(li); } suggestWrap.find('ul').append(tmpFrag); suggestWrap.show(); //为下拉选项绑定鼠标事件 suggestWrap.find('li').hover(function(){ suggestWrap.find('li').removeClass('hover'); $(this).addClass('hover'); },function(){ $(this).removeClass('hover'); }).bind('click',function(){ $(this).find("span").remove(); input.val(this.title); suggestWrap.hide(); }); }; init(); } //实例化输入提示的JS,参数为进行查询操作时要调用的函数名 var searchSuggest = new oSearchSuggest(sendKeyWordToBack); //这是一个模似函数,实现向后台发送ajax查询请求,并返回一个查询结果数据,传递给前台的JS,再由前台JS来展示数据。本函数由程序员进行修改实现查询的请求 //参数为一个字符串,是搜索输入框中当前的内容 function sendKeyWordToBack(keyword, type='all'){ var aData = []; $.get(`${location.origin}/subject_search/${keyword}?cat=${type}`, function (data) { let content = data.match(/<a href="\/subject\/.*?" class="l">.*?<\/a>/g); let type_content = data.match(/<span class="ico_subject_type subject_type_\d ll"><\/span>/g); if(content) { for(var i = 0;i<content.length;i++) { let anime = {}; s = content[i].match(/>.*?</)[0]; anime['name'] = s.substring(1, s.length-1); anime['id'] = content[i].match(/\d+/)[0]; anime['type'] = parseInt(type_content[i].match(/\d/)[0]); aData.push(anime); } //content.forEach(function (item){ // s = item.match(/>.*?</)[0]; // item_name.push(s.substring(1, s.length-1)); // anime['id'] = item; //}); } searchSuggest.dataDisplay(aData); }); //将返回的数据传递给实现搜索输入框的输入提示js类 }