自己尝试封装的一个在工作当中使用的多级弹窗插件:

;(function ($, window, document) { //用一个自调用匿名函数把插架代码包裹起来,防止代码污染
$.fn.multi = function (options, callback) {
let defaults = { //defaults 使我们设置的默认参数。
trigger: '', //触发事件的class
popClass1: '', //第一个弹窗的class
popClass2: '', //第二个弹窗的class
};
options = $.extend(defaults, options); //将传入参数和默认参数合并
let $this = $(this); //响应事件对象 //触发弹窗
$this.on('click', options.trigger, function () { //功能代码部分,绑定事件
//关闭页面上的弹窗
$(options.popClass1).parent().hide();
$(options.popClass2).parent().hide();
//打开新触发的弹窗
$(this).next().show();
}); let levelValue = ''; //每层选择的值
//第一层 事件代理
$this.on('click', options.popClass1 + ">li", function () {
//控制背景颜色高亮
$(this).addClass("active").siblings().removeClass("active");
// 获取当前点击的li的子元素的HTML节点 将获取的节点放到页面显示的第二级中
let html = $(this).children("ul").html();
$(this).parent().parent().next().children(".multi-level-ul2").html(html);
$(this).parent().parent().next().show(); });
//第二层 事件代理
$this.on('click', options.popClass2 + ">li", function () {
$(this).addClass("active").siblings().removeClass("active");
levelValue = $(this).children("span").text();
$(this).parent().parent().prev().prev().text(levelValue);
let level = $this.attr('data-level');
//把选择的值和层级通过回调函数传递回去
callback(levelValue, level);
$(this).parent().parent().prev().hide();
$(this).parent().parent().hide();
});
//点击空白处隐藏div
$(document).click(function (event) {
let targetArea = $('.multi-level-wrap'); // 设置目标区域
if (!targetArea.is(event.target) && targetArea.has(event.target).length === 0) {
$(options.popClass1).parent().hide();
$(options.popClass2).parent().hide();
}
});
}
})(jQuery, window, document);

在页面当中调用:

$('.multi-level-wrap').each(function() {
$(this).multi({
trigger: '.multi-level-input', //触发事件的class
popClass1: '.multi-level-ul1', //第一个弹窗的class
popClass2: '.multi-level-ul2', //第二个弹窗的class
}, function(params, level) { })
})

  

参考链接:https://blog.csdn.net/weixin_39398244/article/details/81539486

参考链接:https://www.cnblogs.com/cbzg/p/5713232.html

参考链接:https://www.jianshu.com/p/5196cb659fb6

封装自己的jquery插件的更多相关文章

  1. 如何将Js代码封装成Jquery插件

    很多相同的Jquery代码会在很多页面使用,每次都复制粘贴太麻烦了,不如封装成一个Jquery插件就方便了,至于影响网页的速度不,我就没有测试了哈. 代码如下 这是一个自定闪烁打印文字的Jquery特 ...

  2. 【jQuery基础学习】08 编写自定义jQuery插件

    目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件.这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率. jQuery插件的类型: 封装对象方 ...

  3. 做了一个jquery插件,使表格的标题列可左右拉伸

    示例下载 插件名称命名为:jquery.tableresize.js,代码如下: /* Writen by mlcactus, 2014-11-24 这是我封装的一个jquery插件,能够使table ...

  4. jQuery编写插件--封装全局函数的插件(一些常用的js验证表达式)

    上一篇写到了jQuery插件的3种类型,介绍了第一种类型的写法--封装jQuery对象的方法插件.这一篇要介绍第二种插件类型:封装全局函数的插件:这类插件就是在jQuery命名空间内部添加函数:这类插 ...

  5. 自己做jQuery插件:将audio5js封装成jQuery语音播放插件

    日前的一个项目需要用到语音播放功能.发现Audio5js符合需求且使用简单,又鉴于jQuery控件便于开发操作,于是有了以下的封装. 首先先简单介绍一下Audio5js吧. Audio5js是一个能够 ...

  6. 封装jQuery插件的步骤

    引语:jQuery提供了很多插件,我们在开发的过程使用插件能节省时间简化开发也避免从头开始编写每个组件,单我们除了懂得使用别人已编写好的插件以外,也到懂得如何封装属于我们自己的插件,以下就是封装jQu ...

  7. jquery插件封装

    HTML <!DOCTYPE html> <html> <head> <title></title> <style> .page ...

  8. 最简单的原生js和jquery插件封装

    最近在开发过程中用别人的插件有问题,所以研究了一下,怎么封装自己的插件. 如果是制作jquery插件的话.就将下面的extend方法换成  $.extend 方法,其他都一样. 总结一下实现原理: 将 ...

  9. 【jQuery】jquery插件封装

    扩展jQuery插件开发的基本知识,最佳做法和常见的陷阱. 入门 编写一个jQuery插件开始于给jQuery.fn加入​​新的功能属性,此处添加的对象属性的名称就是你插件的名称: jQuery.fn ...

随机推荐

  1. maven项目pom.xml中parent标签的使用(转)

    原文地址:https://blog.csdn.net/qq_41254677/article/details/81011681 使用maven是为了更好的帮项目管理包依赖,maven的核心就是pom. ...

  2. 51nod 1172 Partial Sums V2

    题目 给出一个数组A,经过一次处理,生成一个数组S,数组S中的每个值相当于数组A的累加,比如:A = {1 3 5 6} => S = {1 4 9 15}.如果对生成的数组S再进行一次累加操作 ...

  3. ga

    https://developers.google.com/analytics/devguides/collection/gtagjs/events ga 添加事件示例: 在代码中指定您自己的值,就可 ...

  4. zabbix自动注册,实现自动添加机器,减少人工干预

    1.zabbix_agent的安装配置: vim install_zabbix_agent.sh #!/bin/bash #author:chenjianwen RealIP=`curl -s htt ...

  5. 一篇perfect描述“神秘”inf文件的文章[转]

    INF Files for Bears of Little BrainMay 1, 2003Brian Catlin Copyright � 2003 by Brian Catlin. All rig ...

  6. Django框架使用

    ---恢复内容开始--- Django 创建第一个项目 本章我们将介绍Django 管理工具及如何使用 Django 来创建项目,第一个项目我们以 HelloWorld 来命令项目. Django 管 ...

  7. jmeter参数化之 CSV data set config

    第一步:测试计划右键--创建线程组   第二步:选择线程组:右键--sample---创建:http request 配置协议类型和服务名称,method 和path 第三步:选择线程组下的http ...

  8. mongoRepository 支持的所有接口

    与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个对象的增删改查,要使用Repository的功能,先继承MongoReposito ...

  9. (十七)C语言之变量

  10. TCP被动打开 之 第二次握手-发送SYN+ACK

    假定客户端执行主动打开,发送syn包到服务器,服务器执行完该包的第一次握手操作后,调用af_ops->send_synack向客户端发送syn+ack包,该回调实际调用tcp_v4_send_s ...