由於原生select在各個瀏覽器的樣式不統一,特別是在IE67下直接不可以使用樣式控制,當PM讓你做一個樣式的時候,那是相當的痛苦。最好的方法就是使用自訂樣式仿select效果。這裡寫了一個jquery插件,實作自訂的select(閹割了不少原生select的事件,但最主要的都還在)
需要引用的樣式:
.self-select-wrapper{ position: relative; display: inline-block; border: 1px solid #d0d0d0; width: 250px; height:40px; font-size: 14px; } div.self-select-wrapper{ /*解决IE67 块级元素不支持display:inline-block*/ *display:inline; } .self-select-wrapper .self-select-display{ display: inline-block; cursor: pointer; width:100%; height:40px; background: -moz-linear-gradient(top, #fff, #eee); background: -o-linear-gradient(top,#fff, #eee); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#eee)); filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ffffff,endColorStr=#eeeeee); } .self-select-display .self-select-text{ padding-left:10px; display: inline-block; line-height: 40px; width: 210px; } .self-select-display .self-select-arrow-down{ height:0; width:0; overflow: hidden; font-size: 0; line-height: 0; display: inline-block; vertical-align: middle; border-color:#aaa transparent transparent transparent; border-style:solid dashed dashed dashed; border-width:7px; } .self-select-wrapper .self-select-ul{ position: absolute; max-height:200px; _height:200px; border: 1px solid #ccc; background-color: #fff; top:41px; left:0px; overflow-y: auto; _overflow-y:auto !important; padding:0px; margin:0px; width: 100%; z-index:2014; display: none; } .self-select-wrapper .self-select-ul li{ list-style: none; } .self-select-ul .self-select-option{ line-height: 28px; cursor: pointer; display: block; padding-left:10px; text-decoration: none; color:#000; } .self-select-ul .self-select-option:hover, .self-select-ul .current{ background-color: #eee; }
js源碼:
/** * 解决自定义select自定义样式需求 * select父级元素谨慎使用z-index */ (function($){ var tpl = '<div class="self-select-wrapper">'+ '<span class="self-select-display">'+ '<span class="self-select-text"></span>'+ '<i class="self-select-arrow-down"></i>'+ '</span>'+ '<ul class="self-select-ul"></ul>'+ '</div>'; $.fn.selfSelect = function(changeHandler){ var name = $(this).attr('name'); var $selects = $(this); function getSourceData($options) { var text = []; var value = []; $.each($options, function() { text.push($(this).html()); value.push($(this).attr('value')); }); return { text: text, value: value }; } function buildTpl($selfSelect, $select) { var valueArr =[]; var textArr = []; var optionTpl = ''; var $options = $select.find('option'); var sourceData = getSourceData($options); valueArr = sourceData.value; textArr = sourceData.text; $select.hide(); $selfSelect.find('.self-select-text').html(textArr[0]); $.each(textArr, function(seq, text) { optionTpl += '<li><a class="self-select-option" href="#" value="'+valueArr[seq]+'">'+text+'</a></li>'; }); $selfSelect.find('.self-select-ul').html(optionTpl); } function initSelect() { //解决多个select问题 $.each($selects, function(i, selectEl) { var $selfSelect; var guid = Math.floor(Math.random()*100); var $select = $(selectEl); var $parent = $select.parent(); if(!$select.prev().hasClass('self-select-wrapper')) { $select.before(tpl); $select.prev().addClass('select-' + guid); $selfSelect = $parent.find('.select-' + guid); }else { $selfSelect = $select.prev(); } buildTpl($selfSelect, $select); initEvent($selfSelect, $select) }); } function initEvent($selfSelect, $select) { $selfSelect.find('.self-select-display').off('click').on('click', function() { var $selfSelects = $('body').find('.self-select-wrapper'); var isCliked = $(this).hasClass('clicked'); if(isCliked) { $(this).removeClass('clicked'); $selfSelect.find('.self-select-ul').slideUp('fast'); }else { $(this).addClass('clicked'); $selfSelect.find('.self-select-ul').slideDown('fast'); } //防止z-index覆盖问题 $.each($selfSelects, function(i, selectEl) { $(selectEl).css('z-index', 0); }); $selfSelect.css('z-index', 1); }); $selfSelect.find('.self-select-option').on('mousedown', function() { var text = $(this).html(); var value = $(this).attr('value'); $(this).parents('ul').slideUp('fast'); $selfSelect.find('.self-select-display').removeClass('clicked'); $selfSelect.find('.self-select-text').html(text); $(this).addClass('current'); $(this).parent().siblings().children().removeClass('current'); //修改select的值,并触发change事件 $select.val(value); $select.trigger('change', value); }); $(document).on('mousedown', function(e) { if($(e.target).hasClass('self-select-ul') || $(e.target).parent().hasClass('self-select-display')) return; $selfSelect.find('.self-select-display').removeClass('clicked'); $selfSelect.find('.self-select-ul').slideUp('fast'); }); $select.on('change', function(e, val) { changeHandler && changeHandler(val); }); } initSelect(); return this; }; }(jQuery));
使用效果圖:
第二個是之前省市連動的插件產生之後,呼叫自訂select產生的
自訂sleect優點:
- 樣式完全可控制
- 相容IE系列瀏覽器
- 使用方便,不影響預設的change事件處理
開發中遇到的問題:
1.線性漸層
IE下使用filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ffffff,endColorStr=#eeeeee);解決線性漸變問題,詳解請參考下面的資料。
2.IE6 A 標籤hover問題
IE6不設定href屬性,且不會觸發:hover樣式
3.IE 67 區塊級元素display:inline-block
4.z-index層級問題
改變處於active狀態的自訂select的z-index
5.css實現下三角,IE下透明問題
設定透明部分的style值為dashed即可。
border-style:solid dashed dashed dashed;
如果覺得有用,可以推薦給朋友哦,小編願意跟大家共同進步。
以上就是jquery製作select自訂樣式的方法,希望大家喜歡。

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

本文將引導您使用jQuery庫創建一個簡單的圖片輪播。我們將使用bxSlider庫,它基於jQuery構建,並提供許多配置選項來設置輪播。 如今,圖片輪播已成為網站必備功能——一圖胜千言! 決定使用圖片輪播後,下一個問題是如何創建它。首先,您需要收集高質量、高分辨率的圖片。 接下來,您需要使用HTML和一些JavaScript代碼來創建圖片輪播。網絡上有很多庫可以幫助您以不同的方式創建輪播。我們將使用開源的bxSlider庫。 bxSlider庫支持響應式設計,因此使用此庫構建的輪播可以適應任何

將矩陣電影特效帶入你的網頁!這是一個基於著名電影《黑客帝國》的酷炫jQuery插件。該插件模擬了電影中經典的綠色字符特效,只需選擇一張圖片,插件就會將其轉換為充滿數字字符的矩陣風格畫面。快來試試吧,非常有趣! 工作原理 插件將圖片加載到畫布上,讀取像素和顏色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地讀取圖片的矩形區域,並利用jQuery計算每個區域的平均顏色。然後,使用

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),