您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
The jQuery replacement for select boxes
// ==UserScript== // @name Select2 // @namespace https://select2.github.io/ // @version 0.9.3 // @description The jQuery replacement for select boxes // @author t_liang // @include *:* // @exclude *://select2.org/* // @exclude *://app.yinxiang.com/* // @exclude *://www.instagram.com/* // @exclude *://*.tmall.com/* // @exclude *://*.taobao.com/* // @exclude *://www.google.co* // @grant none // ==/UserScript== /* History 0.1 初始版本 0.2 修复版本比较错误,versionMoreThan 0.3 jQuery.noConflict(true) 0.4 支持jQuery.ajax 0.5 exclude app.yinxiang.com 0.6 use setInterval 0.7 config, setTimeout, zIndex 0.8 templateResult matcher 0.9 add group matcher */ /* (function(factory) { debugger; if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define([ 'jquery' ], factory); } else if (typeof exports === 'object') { // Node/CommonJS factory(require('jquery')); } else { // Browser globals factory(jQuery); } })(console.log); */ // console.log(arguments); setTimeout(function() { // config var config = { ignore : [ 'typeof Vue == "function"', 'typeof jQuery == "function" && typeof jQuery.fn.selectpicker == "function"' ], jquery : { _1_3_2 : '1.3.2', // 无 jQuery.expando jQuery._data _1_6_4 : '1.6.4', // select2 渲染正常 支持事件 js : '//cdn.bootcss.com/jquery/3.2.1/jquery.min.js' }, select2 : { js : '//cdn.bootcss.com/select2/4.0.3/js/select2.min.js', css : '//cdn.bootcss.com/select2/4.0.3/css/select2.min.css' }, timeout : 3000, interval : 3000, minWidth : 147 }; // ignore for (var i = config.ignore.length - 1; i >= 0; i--) { if (eval(config.ignore[i])) { return; } } var noConflict, protocol = location.protocol == 'https:' ? 'https:' : 'http:', jQueryOnload = function() { jQuery(function($) { $.ajaxSetup({ cache : true }); var $head = $(document.head), select2Onload = function() { noConflict && $.noConflict(true); // console.log($.fn.select2, location.href); $head.append('<style>span.select2-dropdown{z-index:99999 !important;}</style>'); setInterval(function() { $('select:not(.select2-hidden-accessible,.select2-offscreen,[multiple])').filter(':visible').each(function() { if (typeof jQuery == 'function' && !versionMoreThan(jQuery.fn.jquery, config.jquery._1_6_4) && (jQuery.cache ? jQuery.cache[this[jQuery.expando]] : jQuery._data(this))) { return true; } var $this = $(this), $options = $this.find('option'), $firstOption = $options.first(); $options.length > 2 && $this.select2({ width : Math.max($this.width(), config.minWidth), dropdownAutoWidth : true, placeholder : $firstOption.val() ? '' : $firstOption.text(), //for allowClear allowClear : true, templateResult : function(option, Eoption) { if (option.loading || !option.id) { return option.text; } return '[' + option.id + ']' + option.text; }, matcher : function(params, option) { var term = $.trim(params.term).toUpperCase(); if (!term) { return option; } if ('id' in option) { if (option.text.toUpperCase().indexOf(term) > -1 || option.id.toUpperCase().indexOf(term) > -1) { return option; } } else { var filteredChildren = []; $.each(option.children, function(idx, child) { if (child.text.toUpperCase().indexOf(term) > -1 || child.id.toUpperCase().indexOf(term) > -1) { filteredChildren.push(child); } }); if (filteredChildren.length) { return $.extend({}, option, { children : filteredChildren }); } } return null; } }); }); }, config.interval); }; if ($.isFunction($.fn.select2)) { select2Onload(); } else { $head.append('<link href="' + (protocol + config.select2.css) + '" rel="stylesheet">'); $.getScript(protocol + config.select2.js, select2Onload); } }); }, /** 版本比较: 大于 */ versionMoreThan = function(version, moreThan) { version = version.split('.'); moreThan = moreThan.split('.'); for (var i = 0; i < version.length; i++) { var moreThan_i = i < moreThan.length ? Number(moreThan[i]) : 0; if (version[i] > moreThan_i) { return true; } else if (version[i] < moreThan_i) { return false; } } return false; }; // TODO enter if (typeof jQuery == 'function') { if (versionMoreThan(jQuery.fn.jquery, config.jquery._1_6_4)) { jQueryOnload(); return; } else if (!versionMoreThan(jQuery.fn.jquery, config.jquery._1_3_2)) { return; } } // append jQuery noConflict = true; setTimeout(function() { var jQueryScript = document.createElement('SCRIPT'); jQueryScript.src = protocol + config.jquery.js; jQueryScript.onload = jQueryOnload; document.head.appendChild(jQueryScript); }, config.timeout); }, 3000);