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 get和post 方法传值注意事项
Nov 03 Javascript
javascript中[]和{}对象使用介绍
Mar 20 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
Aug 09 Javascript
JavaScript禁止页面操作的示例代码
Dec 17 Javascript
jQuery使用之处理页面元素用法实例
Jan 19 Javascript
js游戏人物上下左右跑步效果代码分享
Aug 28 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
Jul 01 Javascript
jQuery Ajax请求后台数据并在前台接收
Dec 10 Javascript
three.js快速入门【推荐】
Jan 21 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
JavaScript最完整的深浅拷贝实现方式详解
Feb 28 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的配置文件php.ini
2006/10/09 PHP
PHP新手上路(十一)
2006/10/09 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
jquery实现心算练习代码
2010/12/06 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
儿童学习python的一些小技巧
2018/05/27 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
大学生优秀的自我评价分享
2013/10/22 职场文书
2013年大学生的自我鉴定
2013/10/24 职场文书
高级方案规划工程师岗位职责
2013/11/29 职场文书
大专生的学习自我评价
2013/12/04 职场文书
大学军训通讯稿
2014/01/13 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
银行招聘自荐信
2015/03/06 职场文书
Python必备技巧之函数的使用详解
2022/04/04 Python