Javascript 在多个元素上滚动时添加/删除类

Javascript 在多个元素上滚动时添加/删除类,javascript,jquery,html,Javascript,Jquery,Html,我使用一个脚本(我可能在这里找到)在滚动时添加/删除元素上的类。脚本从菜单中关联href,以向页面中的相应元素添加/删除类。当使用一个菜单和一组元素时,脚本工作得很好,但我试图使它在多个菜单中可用,但我似乎找不到哪里出了问题。我在getTargetTop()函数中遇到了一个错误,但我无法解决它 以下是我正在使用的代码: $(window).scroll(function(e){ checkSectionSelected($(window).scrollTop()); }); funct

我使用一个脚本(我可能在这里找到)在滚动时添加/删除元素上的类。脚本从菜单中关联href,以向页面中的相应元素添加/删除类。当使用一个菜单和一组元素时,脚本工作得很好,但我试图使它在多个菜单中可用,但我似乎找不到哪里出了问题。我在getTargetTop()函数中遇到了一个错误,但我无法解决它

以下是我正在使用的代码:

$(window).scroll(function(e){
    checkSectionSelected($(window).scrollTop());
});

function getTargetTop(elem){
    console.log(elem.attr('href'));
    var id = elem.attr("href");
    var offset = 0;
    return $(id).offset().top - offset;
}

var sections = $('ul.ctrl a');
var mainmenu = $('nav a');

function checkSectionSelected(scrolledTo){

var threshold = 100;

var i;

for (i = 0; i < sections.length; i++) {

    var section = $(sections[i]);
    var target = getTargetTop(section);

    if (scrolledTo > target - threshold && scrolledTo < target + threshold) {
        $('.char').removeClass('active');
        $('.char'+section.attr('href')).addClass('active');
        sections.parent('li').siblings('li').removeClass("active");
        section.parent('li').addClass("active");
    }
};

var m;

for (m = 0; m < mainmenu.length; m++) {
    var link = $(mainmenu[m]);
    var newTar = getTargetTop(link);
    if (scrolledTo > newTar - threshold && scrolledTo < newTar + threshold) {
        sections.parent('li').siblings('li').removeClass("active");
        section.parent('li').addClass("active");
    }

};

}
$(窗口)。滚动(功能(e){
checkSectionSelected($(窗口).scrollTop());
});
函数getTargetTop(elem){
console.log(elem.attr('href');
var id=elem.attr(“href”);
var偏移=0;
返回$(id).offset().top-offset;
}
变量部分=$('ul.ctrl a');
var主菜单=$('nav a');
已选择功能检查部分(滚动至){
var阈值=100;
var i;
对于(i=0;i目标-阈值和滚动到<目标+阈值){
$('.char').removeClass('active');
$('.char'+section.attr('href')).addClass('active');
节。父级(“li”)。兄弟级(“li”)。removeClass(“活动”);
第节。母公司(“li”).addClass(“主动”);
}
};
var-m;
对于(m=0;m
新塔-阈值和滚动到<新塔+阈值(&C)){ 节。父级(“li”)。兄弟级(“li”)。removeClass(“活动”); 第节。母公司(“li”).addClass(“主动”); } }; }

谢谢你的帮助

那么你的错误是什么?它应该记录在浏览器的控制台中。您应该研究如何使用.each()方法在jQuery元素中循环,而不是那种丑陋的for循环。