0

有一个很好的标准 jQuery 函数用于在链接上切换类。想象一个新的背景颜色被添加到链接中。

$(document).ready(function(){
        $('.blocklink a').click(function(){
            $(this).parent().find('a').removeClass('active');
            $(this).addClass('active');
            return false
        });
    });

很简单,但我想知道我们是否可以为诸如此类的脚本节省大量时间,因为考虑到需要这样的事情的频率。--these

$(document).ready(function(){
            $('.blocklink a').click(function(){
                $(these).removeClass('active');
                $(this).addClass('active');
                return false
            });
        });

有没有一种方法可以创建术语这些作为填充符来填充.click(function .scroll(function .mouseenter(function等...等中指定的初始元素组

4

4 回答 4

2

如果您不希望元素动态更改(即您不会添加或删除它们中的任何一个),那么您可以缓存选择器的结果:

$(document).ready(function() {
    var $these = $('.blocklink a');
    $these.click(function() {
        $these.removeClass('active');
        $(this).addClass('active');
        return false
    });
});
于 2012-09-20T13:27:01.650 回答
1

您不会节省大量费用,但您可以缓存$('.blocklink a');返回的 jQuery 对象。

$(document).ready(function() {
    var $these = $('.blocklink a').click(function() {
        $these.removeClass('active');
        $(this).addClass('active');
        return false
    });
});

FWIW,如果您对性能感兴趣,您当前在所有后代中搜索的选择器a,但从您看来$(this).parent(),您只需要孩子。

考虑到这一点,您只能使用>选择器遍历子代(而不是后代) ;

$(document).ready(function() {
    var $these = $('.blocklink > a').click(function() {
        $these.removeClass('active');
        $(this).addClass('active');
        return false
    });
});

此外,children()搜索children,where-asfind()搜索所有后代。

于 2012-09-20T13:28:50.247 回答
0

简单地说:没有。

但是您可以使用.siblings()ti 稍微简化一下。

于 2012-09-20T13:28:13.900 回答
0

你能用一个函数吗?这将防止您影响其他 .blocklink 元素中的锚点

$('.blocklink a').click(function(){
    parentAnchors(this).removeClass('active');
    $(this).addClass('active');
    return false
});

function parentAnchors(elem){
    return $(elem).parent().find('a');
}
于 2012-09-20T13:37:26.127 回答