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 相关文章推荐
动态刷新 dorado树的js代码
Jun 12 Javascript
JavaScript 高级语法介绍
Jun 15 Javascript
js分解url参数(面向对象-极简主义法应用)
Aug 09 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
通过扫描二维码打开app的实现代码
Nov 10 Javascript
BootStrap表单控件之文本域textarea
May 23 Javascript
WdatePicker.js时间日期插件的使用方法
Jul 26 Javascript
使用node.JS中的url模块解析URL信息
Feb 06 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
Feb 24 Javascript
jQuery实现简单弹幕制作
Dec 10 jQuery
关于网页中的无缝滚动的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 tp验证表单与自动填充函数代码
2012/02/22 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python3.5运算符操作实例详解
2019/04/25 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
万年牢教学反思
2014/02/15 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
出纳岗位职责范本
2015/03/31 职场文书
如何书写授权委托书?
2019/06/25 职场文书
pytorch 如何使用float64训练
2021/05/24 Python
python 闭包函数详细介绍
2022/04/19 Python