首页 新闻 会员 周边

jq这段语句中的id到底是什么意思

0
[已解决问题] 解决于 2016-12-30 17:05

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吗?

Yhspehy的主页 Yhspehy | 菜鸟二级 | 园豆:232
提问于:2016-12-30 00:05
< >
分享
最佳答案
0
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());
});

 

奖励园豆:5
、熙和 | 小虾三级 |园豆:1508 | 2016-12-30 10:50

谢谢你的讲解,已经看懂了,这个是jekyll blog的一些源码,我也觉得可以像你那样写,那样好理解多了。

Yhspehy | 园豆:232 (菜鸟二级) | 2016-12-30 17:04
其他回答(4)
0

看了一会儿,不带引号的id当然是参数喽,带引号的id可能就是有个li叫id吧,不过还是到页面上看一下才好确定,个人感觉,哈哈

大水煮鱼 | 园豆:366 (菜鸟二级) | 2016-12-30 08:34

谢谢啦

支持(0) 反对(0) Yhspehy | 园豆:232 (菜鸟二级) | 2016-12-30 17:01
0

id指的是每个li的id

张云山 | 园豆:642 (小虾三级) | 2016-12-30 08:46

是的

 

支持(0) 反对(0) Yhspehy | 园豆:232 (菜鸟二级) | 2016-12-30 17:01
0

这里总的出现3次ID

var clickHandler = function(id) {

……

$('.' + id).delay(50).fadeIn(350);/* 这边两次出现的ID为参数 ,联系上下文,这个ID为类名class名*/
……

$('#' + $(this).attr('id')).on('click', clickHandler($(this).attr('id')));/*这边出现的就简单了,就是id这两个字的字符串*/

盟怀部孩 | 园豆:878 (小虾三级) | 2016-12-30 09:29

这个id不是class类名,就是一个li的id,只是每个li的id不一样。

支持(0) 反对(0) Yhspehy | 园豆:232 (菜鸟二级) | 2016-12-30 17:02
0

id就是一个参数吧

剧里局外 | 园豆:3 (初学一级) | 2016-12-30 15:26

嗯嗯

支持(0) 反对(0) Yhspehy | 园豆:232 (菜鸟二级) | 2016-12-30 17:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册