/** * created by hzwy23 on 2016/10/23. */ (function($){ $.fn.hselect = function(param){ var sel = this var obj = document.createelement("div") //init div css //get parent class to it $(obj).css({ "padding":"0", "margin":"0", "border":"none", "outline":"none", "text-align":"left", "position":"relative" }).addclass($(sel).attr("class")) // default parameters var __default = { data: "", height:"26px", width:"auto", border:"#ccc solid 1px", fontsize:"13px", borderradius:"0px", bgcolor:"white", placeholder:"地区", showliheight:"30px", showheight:"230px", showborder:"", showfontsize:"14px", iconcolor:"#ff5763", onchange:"", } $.extend(true,__default,param); // set showborder to border style if (__default.showborder==""){ __default.showborder = __default.border } /* * this function sort array. * accept one array variable. * */ function sorttree(a){ // load result sorted var list = []; // get select's options // append it to new select which simulate by ul li if (object.prototype.tostring.call(a) == '[object array]'){ $(sel).find("option").each(function(index,element){ var ijs = {} ijs.id = $(element).val(); ijs.text = $(element).text() a.push(ijs) }) } else { $(sel).find("option").each(function(index,element){ var ijs = {} ijs.id = $(element).val(); ijs.text = $(element).text() list.push(ijs) }) return list } //set max dept val var maxdept = 8; var index = 1; function getroots(arr){ var roots = []; for(var i = 0; i < arr.length;i++){ var rootflag = true for ( var j = 0; j < arr.length;j++){ if (arr[i].upid == arr[j].id){ rootflag = false break } } if (rootflag == true){ roots.push(arr[i]) } } return roots } function traversed(node,arr){ if (++index > maxdept){ return } for (var i = 0; i < arr.length; i++){ if (node == arr[i].upid){ arr[i].dept = index list.push(arr[i]) traversed(arr[i].id,arr) } } index--; } function listelem(roots,arr){ for (var i = 0; i < roots.length; i++){ roots[i].dept = index list.push(roots[i]) traversed(roots[i].id,arr) } } listelem(getroots(a),a) return list } function gentreeui(a){ var odivstyle='cursor:pointer;background-color: '+__default.bgcolor+';padding:0px;text-align: left !important;width: '+__default.width+'; border:'+__default.border+'; height: '+__default.height+'; line-height: '+__default.height+'; padding-left: 10px;border-radius:'+__default.borderradius+'' var odiv = '
' + ''+__default.placeholder+'' + '' + '' + '
' odiv+='' return opt; } function showup(e){ var dept = $(e).attr("data-dept") $(e).prevall().each(function(index,element){ if (parseint(dept)>parseint($(element).attr("data-dept"))){ $(element).show(); dept = $(element).attr("data-dept") } }) } function initselect(selobj,arr){ var opthtml = "" for (var i = 0; i < arr.length; i++){ opthtml+='' } $(selobj).append(opthtml) $(selobj).hide() } function showorhide(e){ var topbordercolor = __default.iconcolor+' transparent transparent transparent' var leftbordercolor = 'transparent transparent transparent '+__default.iconcolor var dept = $(e).attr("data-dept") var nextobj = $(e).next() var nextdept = $(nextobj).attr("data-dept") var nextdisplay = $(nextobj).css("display") if (nextdisplay == "none" && parseint(nextdept)>parseint(dept)){ $(e).find("i").css({ "border-color":topbordercolor, "border-width":"6px 5px 0px 5px" }) $(e).nextall().each(function(index,element){ if (parseint(dept)+1==parseint($(element).attr("data-dept"))){ $(element).find("i").css({ "border-color":leftbordercolor, "border-width":"5px 0px 5px 6px", }); $(element).show(); }else if (parseint(dept)+1 < parseint($(element).attr("data-dept"))){ $(element).find("i").css({ "border-color":leftbordercolor, "border-width":"5px 0px 5px 6px", }) $(element).hide(); }else{ return false } }) }else if (nextdisplay == "none" && parseint(nextdept)<=parseint(dept)){ return }else if (nextdisplay != "none" && parseint(nextdept)>parseint(dept)){ $(e).find("i").css({ "border-color":leftbordercolor, "border-width":"5px 0px 5px 6px", }) $(e).nextall().each(function(index,element){ if (parseint(dept)=parseint($(element).attr("data-dept"))){ return false } }) }else { return } } var ui = gentreeui(sorttree(__default.data)) initselect(sel,__default.data) $(obj).html(ui) $(sel).after(obj) $(obj).find("input").focus(); //when select was change //change show values $(sel).on('change',function(){ //window.event.cancelbubble = true; var text = $(this).find("option:selected").text() $(obj).find(".hshowselectvalue span").html(text) }) $(obj).find("ul li").each(function(index,element){ var curdept = parseint($(element).attr("data-dept")) var nextdept = parseint($(element).next().attr("data-dept")) if (curdept>=nextdept || isnan(nextdept)){ $(element).find("hzw").remove() } }) $(obj).find("input").on('input',function(e){ if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } var inptext = $(this).val(); if (inptext == ""){ $(obj).find("ul li").show(); return } $(obj).find("ul li").each(function(index,element){ if ($(element).find("span").html().indexof(inptext)>=0){ $(element).show() showup(element) }else{ $(element).hide() } }) }) $(obj).find("input").on('click',function(e){ if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } $(this).focus(); }) $(obj).find(".hshoworhideiconhzw").on("click",function(e){ if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } showorhide($(this).parent()) }) $(obj).find("li").on('mouseover',function(e){ if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } var ul = $(this).closest("ul") $(ul).find("li").css({ "background-color":"", "color":"" }) $(this).css({ "background-color":"#6699cc", "color":"white" }) }) $(obj).find("li").on('click',function(e){ if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } var text = $(this).find("span").html(); var id = $(this).attr("data-id") $(sel).val(id) $('#areacode').val(id); $(this).closest("div").prev().find("span").html(text) $(this).closest("div").hide(); $("body").find(".hzwy23fillbodyforselectitems").animate({height:'0px'},500,function(){ $(this).remove() }) $(obj).find(".hshowselectvalue i").css({ "border-color":"#888 transparent transparent transparent", "border-width":"5px 4px 0px 4px" }) if (typeof __default.onchange == "function"){ __default.onchange(); } }) $(obj).find("ul").on('mousewheel',function(e){ if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } }) $("div").scroll(function(e) { if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } var showuistatus = $(obj).find(".hselectshowareahuangzhanwei").css("display") if (showuistatus != "none"){ var ptop = $(obj).offset().top var pleft = $(obj).offset().left; var tp = ptop+$(obj).find(".hshowselectvalue").height() $(obj).find(".hselectshowareahuangzhanwei").offset({top:tp,left:pleft}) } }); $(document).scroll(function(e) { if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } var showuistatus = $(obj).find(".hselectshowareahuangzhanwei").css("display") if (showuistatus != "none"){ var ptop = $(obj).offset().top var pleft = $(obj).offset().left; var tp = ptop+$(obj).find(".hshowselectvalue").height() $(obj).find(".hselectshowareahuangzhanwei").offset({top:tp,left:pleft}) } }); $("body").scroll(function(e) { if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } var showuistatus = $(obj).find(".hselectshowareahuangzhanwei").css("display") if (showuistatus != "none"){ var ptop = $(obj).offset().top var pleft = $(obj).offset().left; var tp = ptop+$(obj).find(".hshowselectvalue").height() $(obj).find(".hselectshowareahuangzhanwei").offset({top:tp,left:pleft}) } }); $(obj).find(".hshowselectvalue").on('click',function(e){ var showuistatus = $(obj).find(".hselectshowareahuangzhanwei").css("display") if(e){ e.stoppropagation(); }else{ window.event.cancelbubble = true;//ie } if (showuistatus == "none"){ $(".hselectshowareahuangzhanwei").hide() $(".hshowselectvalue i").css({ "border-color":"#888 transparent transparent transparent", "border-width":"5px 4px 0px 4px", }) var w = $(obj).width() $(obj).find(".hselectshowareahuangzhanwei").css("min-width",w) $(obj).find(".hselectshowareahuangzhanwei input").css("min-width",w-12) var nextobj = $(this).next() $(nextobj).find("input").val("") $(nextobj).show(); $(nextobj).find("input").focus(); $(nextobj).find("ul").scrolltop(0); $(nextobj).find("ul").scrollleft(0); $(obj).find(".hshowselectvalue i").css({ "border-color":"transparent transparent #888 transparent", "border-width":"0px 4px 5px 4px" }) var ptop = $(obj).offset().top var pleft = $(obj).offset().left; var tp = ptop+$(this).height() var ulheight = $(nextobj).height() if (tp+ulheight > document.body.scrollheight){ var addheight = tp+ulheight+30 - document.body.scrollheight var appdiv = document.createelement("div") $(appdiv).css("height",addheight).addclass("hzwy23fillbodyforselectitems") $("body").append(appdiv) var st = $("body").scrolltop(); $("body").animate({scrolltop:st+addheight},500) } $(obj).find(".hselectshowareahuangzhanwei").offset({ top:tp, left:pleft }) }else{ $(obj).find("li").closest("div").hide(); $(obj).find(".hshowselectvalue i").css({ "border-color":"#888 transparent transparent transparent", "border-width":"5px 4px 0px 4px" }) $("body").find(".hzwy23fillbodyforselectitems").animate({height:'0px'},500,function(){ $(this).remove() }) } }) $(document).on('click',function(){ $(obj).find("li").closest("div").hide(); $(obj).find(".hshowselectvalue i").css({ "border-color":"#888 transparent transparent transparent", "border-width":"5px 4px 0px 4px" }) $("body").find(".hzwy23fillbodyforselectitems").animate({height:'0px'},500,function(){ $(this).remove() }) }) } }(jquery));