$(function() { var Accordion = function(el, multiple) { this.el = el || {}; this.multiple = multiple || false; // Variables privadas var links = this.el.find('.link'); // Evento links.on('click', {el: this.el, multiple: this.multiple}, this.dropdown) } Accordion.prototype.dropdown = function(e) { var $el = e.data.el; $this = $(this), $next = $this.next(); $next.slideToggle(); $this.parent().toggleClass('open'); if (!e.data.multiple) { $el.find('.submenu').not($next).slideUp().parent().removeClass('open'); }; } var accordion = new Accordion($('#accordion'), false);});有几处不明白的,麻烦大大们解答下var Accordion = function(el, multiple),这个函数传的第二个参数有什么作用?links.on('click', {el: this.el, multiple: this.multiple}, this.dropdown) 中间那句花括号起到什么作用了?var $el = e.data.el; e.data.el是什么意思?有啥作用$el.find('.submenu').not($next).slideUp().parent().removeClass('open'); 最后这句话not是干嘛用的,为啥要这样写呢这个效果来自jquery插件库的这个插件 http://www.jq22.com/jquery-info810
5 回答
已采纳
荒丶謬
TA贡献7条经验 获得超5个赞
multiple的作用是用来控制是否能展开多个列表(这里传入false,每次就只能展开一个,展开另外一个就收起前面展开的)
{el: this.el, multiple: this.multiple}这个就是传入到函数里面的数据data
所以在这里e.data就相当于{el: this.el, multiple: this.multiple}那么e.data.el就是取得其中的值了this.el。
然后就是$el.find('.submenu')这个选择器取到了id为accordion元素下面的所有class为submenu的ul,但是这里只要展开当前你点击的li下面的ul。而不需要其他的展开。所以用到了.not($next).就是非当前点击中的其他li下面的ul都隐藏。第一个问题的参数multiple就是用来判断执不执行这句代码
if (!e.data.multiple) {
$el.find('.submenu').not($next).slideUp().parent().removeClass('open');
};
- 5 回答
- 1 关注
- 4252 浏览
添加回答
举报
0/150
提交
取消