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操作JSON的要领总结
Dec 09 Javascript
Javascript图像处理—平滑处理实现原理
Dec 28 Javascript
javascript引用赋值(地址传值)用法实例
Jan 13 Javascript
BootStrap入门教程(三)之响应式原理
Sep 19 Javascript
jQuery Validate插件自定义验证规则的方法
Dec 27 Javascript
jQuery ajax动态生成table功能示例
Jun 14 jQuery
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 Javascript
js实现复制功能(多种方法集合)
Jan 06 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
Aug 03 jQuery
mpvue跳转页面及注意事项
Aug 03 Javascript
js 实现在2d平面上画8的方法
Oct 10 Javascript
webpack.DefinePlugin与cross-env区别详解
Feb 23 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
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python实现购物车程序
2018/04/16 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
经典c++面试题二
2015/08/14 面试题
社团2014年植树节活动总结
2014/03/11 职场文书
北京爱情故事观后感
2015/06/12 职场文书
迎新年主持词
2015/07/06 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis