var clickHandler = function(id) {
return function() {
$(this).addClass('active').siblings().removeClass('active');
$('.pl__all').hide();
$('.' + id).delay(50).fadeIn(350);
}
};
$('#tags__ul li').each(function(index){
$('#' + $(this).attr('id')).on('click', clickHandler($(this).attr('id')));
});
在第一个function中,里面的this指的是id,但是我不懂这个id指的是什么,是有这个id的li吗?
var clickHandler = function(id) { return function() { $(this).addClass('active').siblings().removeClass('active'); $('.pl__all').hide(); $('.' + id).delay(50).fadeIn(350); } }; $('#tags__ul li').each(function(index){ $('#' + $(this).attr('id')).on('click', clickHandler($(this).attr('id'))); });
首先,第一个function中的this, 不是指id, 是指当前触发此函数的元素;function(id) 这里的id是调用时传过来的参数, 然$('.'+id);这里就是用传过来的值去拼类样式, 然后利用jq的类选择器去查找元素;
第二个function中的this,是指循环里当前的li;
$(this).attr('id')这个是获取当前li的id ,$('#' + $(this).attr('id'));这里还是想获取id为当前li的元素;
.on('click', clickHandler($(this).attr('id')));这里是给当前的li绑定点击事件,调用第一个function
光看这两段代码,觉得好多可以不这样写,没有特殊要求完全可以下面这样:
var clickHandler = function() { return function() { $(this).addClass('active').siblings().removeClass('active'); $('.pl__all').hide(); $(this).delay(50).fadeIn(350); } }; $('#tags__ul li').each(function(index){ $(this).on('click', clickHandler()); });
谢谢你的讲解,已经看懂了,这个是jekyll blog的一些源码,我也觉得可以像你那样写,那样好理解多了。
看了一会儿,不带引号的id当然是参数喽,带引号的id可能就是有个li叫id吧,不过还是到页面上看一下才好确定,个人感觉,哈哈
谢谢啦
id指的是每个li的id
是的
这里总的出现3次ID
var clickHandler = function(id) {
……
$('.' + id).delay(50).fadeIn(350);/* 这边两次出现的ID为参数 ,联系上下文,这个ID为类名class名*/
……
$('#' + $(this).attr('id')).on('click', clickHandler($(this).attr('id')));/*这边出现的就简单了,就是id这两个字的字符串*/
这个id不是class类名,就是一个li的id,只是每个li的id不一样。
id就是一个参数吧
嗯嗯