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 相关文章推荐
Javascript 判断是否存在函数的方法
Jan 03 Javascript
解读JavaScript中 For, While与递归的用法
May 07 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
解析预加载显示图片艺术
Dec 05 Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
详解React 服务端渲染方案完美的解决方案
Dec 14 Javascript
vue-router实现嵌套路由的讲解
Jan 19 Javascript
JS扁平化输出数组的2种方法解析
Sep 17 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 Javascript
JavaScript中作用域链的概念及用途讲解
Aug 06 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
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
DOM 高级编程
2015/05/06 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
详解python单例模式与metaclass
2016/01/15 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
python如何查看安装了的模块
2020/06/23 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
三年级科学教学反思
2014/01/29 职场文书
会计电算化实训报告
2014/11/04 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
领导新年致辞2016
2015/07/29 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis