3kb jQuery代码搞定各种树形选择的实现方法


Posted in Javascript onJune 10, 2016

自制Jquery树形选择插件.

对付各种树形选择(省市,分类..)90行Jquery代码搞定,少说废话直接上插件代码。稍后介绍使用说明。是之前写的一个插件的精简版。

1.Jquery插件代码

(function (j) {
  j.fn.attrs = function (option) {
    var root = this, data = [];
    //默认参数
    var def = { url: '/ajax/GetSort/', str: root.attr("str") || '0', handel: function (v) {
      return "<option value=" + v.id + ">" + v.type + "</option>"

    }, path: root.attr("val") || 0, sChar: ',', change: function (v) { }
    };
    //参数合并
    def = j.extend({}, def, option);
    //是否初始化
    ispath() ? init() : create(def.str);
    //请求分类并选中
    function create(id, o, v) {
      if (!id || parseInt(id) == -1)
        return o.nextAll().remove();
      //创建select
      var select = j("<select></select>").hide();
      _b(select);
      //添加到容器内
      if (o) o.nextAll().remove();
      root.append(select);
      //发起Ajax请求
      j.ajax({
        type: "GET",
        url: def.url,
        data: { id: id },
        dataType: "json",
        cache: true,
        success: function (json) {
          datainit(select, json, v);
        }
      })

    }
    function datainit(select, data, v) {
      _c(select, data).val(v || -1);
      if (select.children("option").length <= 1) {
        select.remove();
        return;
      }
      else
        select.removeAttr("style");
    }
    //判断是否符合格式
    function ispath() {
      return def.path && /^(\d{1,},)*\d{1,}$/.test(def.path) && def.path != '0,0,0';
    }
    //创建值
    function _v() {
      var v = new Array(), vtext = new Array();
      v.push(0);
      root.children("select").each(function () {
        if (j(this).val() > 0) {
          v.push(j(this).val());
          vtext.push(j(this).children("option[selected]").text())
        }
      })
      root.attr("val", v.join(','));
      root.attr("vtext", vtext.join(">"));
      def.change(v);
    }
    //初始化
    function init() {
      if (ispath()) {
        var list = def.path.split(def.sChar);
        for (var i in list) {
          create(list[i], null, list[++i]);
        }
        return;
      }
      alert("Error:分类出错!")
    }
    //绑定事件
    function _b(select) {
      select.bind("change", function () {
        create(j(this).val(), j(this));
        _v();
      })
    }
    //创建下拉框
    function _c(select, data) {
      select.append(j("<option value='-1'>==请选择==</option>"));
      for (var i = 0; i < data.length; i++) {
        select.append(j(def.handel(data[i])));
      }
      return select;
    }
  }
})($)

2.对付省市选择

3kb jQuery代码搞定各种树形选择的实现方法

3.对付各种让你蛋疼的无限级选择

3kb jQuery代码搞定各种树形选择的实现方法

4.如何使用

<div id="attr"></div>
<script type="text/javascript">
(function($){
$("#attr").attr(
 {
 url: '/ajax/GetSort/',//ajax 获取的URL 服务器返回的是Json 数据
 str: root.attr("str") || '0',//获取初始化的分类path.例如:23,45,90。在编辑的情况下能正确还原
 handel: function (v) {//数据处理的回调函数,表明如何对后台数据进行解析。 如[{id:32,type:"分类"}]
   return "<option value=" + v.id + ">" + v.type + "</option>"
  },
 path: root.attr("val") || 0,
 sChar: ',',//path 拆分的字符如果,path 为23|45|90 则 ‘|'
 change: function (v) { }//选择框修改处理事件
  };
);
})(jQuery)
</script>

以上这篇3kb jQuery代码搞定各种树形选择的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery使用手册之一
Mar 24 Javascript
用Javscript实现表单复选框的全选功能
May 25 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
Jan 03 Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 Javascript
js实现无缝滚动特效
Dec 20 Javascript
AngularJS ng-controller 指令简单实例
Aug 01 Javascript
js实现倒计时效果(小于10补零)
Mar 08 Javascript
利用Vue v-model实现一个自定义的表单组件
Apr 27 Javascript
JS运动特效之任意值添加运动的方法分析
Jan 24 Javascript
JS数组中对象去重操作示例
Jun 04 Javascript
JS函数式编程实现XDM一
Jun 16 Javascript
关于网页中的无缝滚动的js代码
Jun 09 #Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 #Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 #Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
Jun 09 #Javascript
JavaScript事件学习小结(一)事件流
Jun 09 #Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
Jun 09 #Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
Jun 09 #Javascript
You might like
MySQL连接数超过限制的解决方法
2011/07/17 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
js返回上一页并刷新代码整理
2012/12/21 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
Python实现的科学计算器功能示例
2017/08/04 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
django中模板的html自动转意方法
2018/05/27 Python
python 产生token及token验证的方法
2018/12/26 Python
python for循环remove同一个list过程解析
2019/08/14 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
建筑工地大门标语
2014/06/18 职场文书
森林防火标语
2014/06/23 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
入队仪式主持词
2015/07/04 职场文书
春节慰问简报
2015/07/21 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python