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 相关文章推荐
Mootools 1.2教程 排序类和方法简介
Sep 15 Javascript
理解Javascript_07_理解instanceof实现原理
Oct 15 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
May 10 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
Aug 18 Javascript
jquery1.9 下检测浏览器类型和版本的方法
Dec 26 Javascript
做好七件事帮你提升jQuery的性能
Feb 06 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
Oct 05 Javascript
vue引入jq插件的实例讲解
Sep 12 Javascript
javascript实现留言板功能
Feb 08 Javascript
javascript 设计模式之组合模式原理与应用详解
Apr 08 Javascript
JavaScript arguments.callee作用及替换方案详解
Sep 02 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中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
深入理解Javascript中的循环优化
2013/11/09 Javascript
JS中操作JSON总结
2020/12/06 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
centos7之Python3.74安装教程
2019/08/15 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
详解Python 函数参数的拆解
2020/09/02 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
网络技术支持面试题
2013/04/22 面试题
师范生实习的个人自我鉴定
2013/10/20 职场文书
办公室主任先进事迹
2014/01/18 职场文书
2014升学宴答谢词
2014/01/26 职场文书
课程改革实施方案
2014/03/16 职场文书
2014年党务公开方案
2014/05/08 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
中班下学期个人总结
2015/02/12 职场文书