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 仿QQ滑动菜单效果代码
Sep 03 Javascript
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
jQuery性能优化的38个建议
Mar 04 Javascript
浅谈JavaScript 框架分类
Nov 10 Javascript
node.js中的fs.mkdirSync方法使用说明
Dec 17 Javascript
javascript中return,return true,return false三者的用法及区别
Nov 17 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
JavaScript基础心法 数据类型
Mar 05 Javascript
jQuery实现的模仿雨滴下落动画效果
Dec 11 jQuery
微信小程序自定义键盘 内部虚拟支付
Dec 20 Javascript
Koa 中的错误处理解析
Apr 09 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
微信小程序 传值取值的几种方法总结
2017/01/16 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
JS实现多功能计算器
2020/10/28 Javascript
python抓取网页中图片并保存到本地
2015/12/01 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
使用django实现一个代码发布系统
2019/07/18 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
python 绘制正态曲线的示例
2020/09/24 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
智乐游戏测试笔试题
2014/05/21 面试题
大专毕业生求职信
2014/07/05 职场文书
公司委托书格式范本
2014/09/16 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL
virtualenv隔离Python环境的问题解析
2022/06/21 Python