$('this')的问题。孩子在我的函数中不起作用



所以基本上我有几个链接需要显示滑动面板。我的初始代码是这样的。

function view(panel){
$(panel).slideToggle();
};
$('#link1').click(function(){
view('#panel1');
});

所以我现在的问题是,在链接旁边,我想包括一个箭头,当点击链接时向上,面板向下滑动,当点击时隐藏它,面板向上滑动,表明再次点击链接将隐藏面板。箭头被赋予class="arrow",并且是链接的直接子级。

function view(panel){
$(panel).slideToggle();
};
$('#link1').click(function(){
view('#panel1');
$(this).children('.arrow').toggle();
});

这是可行的,但我不想为每个链接重复$(this).children('.arrow').toggle;(会有很多)。所以我就这么做了。

function view(panel){
$(panel).slideToggle();
$(this).children('.arrow').toggle();
};
$('#link1').click(function(){
view('#panel1');
});

此操作不起任何作用,箭头仍显示:无。为什么?我看不出有什么不同的解释。$(this)不能在被调用的单独函数中使用吗?我试过搜索,但不知道如何搜索这种问题,除了。。。。。打好那个问题,我没有得到任何有用的结果。有人能告诉我如何通过在函数中定义它来实现这一点吗?这样我就不必为每个链接重复代码了?

您可以这样做:

view.call(this, '#panel1');

这将保留上下文。或者你可以这样做:

function view(panel, link){
    $(panel).slideToggle();
    $(link).children('.arrow').toggle;
};
$('#link1').click(function(){
    view('#panel1', this);
});

你也可以试试这样的东西:

$('#link1, link2' /* or 'a.link', etc */, function() {
    // assuming the has is the panel #panel1
    //$(this.hash).slideToggle();
    // Or using what you already have
    $('panel' + this.id.match(/d/)).slideToggle();
    $(this).children('.arrow').toggle;
    // Then do something based on the id?
    return false;
}); 

最新更新