JavaScript / jQuery:可以通过for循环“自动化”switch语句吗?

时间:2012-07-07 16:01:13

标签: javascript jquery loops scroll switch-statement

$(window).scroll(function() {
            var y = $(this).scrollTop();
            for (var i = 0; i < offset.length; i++)
                {
                    if (y < offset[i].bottom) {
                        $("#catSelect option:selected").removeAttr("selected");
                        $("#catSelect option[value=#"+offset[i].id+"]").attr("selected", "selected");
                        break;
                    }
                }
        });

感谢您的帮助!

问题

我是JavaScript和jQuery的初学者,所以我希望有些善良的人可以帮助我。 下面是一段执行得很好的代码片段......但由于它非常重复,我试图提出一些代码来帮助我在switch语句中“自动化”所有这些条件,而不是手动指定它(如果那讲得通)。我正在使用'for'循环,但到目前为止还没有结果。

请朝正确的方向轻推?谢谢:))

〜初步代码〜

var offset = [];
        $(".cat").each(function() {
            var top =  $(this).offset().top;
            var bottom = top + $(this).outerHeight();
            var id = $(this).attr("id");
            offset.push({"top": top, "bottom": bottom, "id": id });
            $(document.body).append(offset.length);
        });

〜代码全是〜

$(window).scroll(function() {
    var y = $(this).scrollTop();

        switch (true) {
            case (y < offset[0].bottom):
                $("#catSelect option:selected").removeAttr("selected");
                $("#catSelect option[value=#"+offset[0].id+"]").attr("selected", "selected");
                break;
            case (y < offset[1].bottom):
                $("#catSelect option:selected").removeAttr("selected");
                $("#catSelect option[value=#"+offset[1].id+"]").attr("selected", "selected");
                break;
            case (y < offset[2].bottom):
                $("#catSelect option:selected").removeAttr("selected");
                $("#catSelect option[value=#"+offset[2].id+"]").attr("selected", "selected");
                break;
            }

        });

2 个答案:

答案 0 :(得分:4)

你的方法非常出色!我从未考虑过switch(true):)

你可以尝试一下,看看它是否适合你:

for (var i = 0; i<=2; i++)
{
    if (y < offset[i].bottom) {
        $("#catSelect option:selected").removeAttr("selected");
        $("#catSelect option[value=#"+offset[i].id+"]").attr("selected", "selected");
    }
}

答案 1 :(得分:3)

因为它只是在不同情况下不同的数组索引:

for (var i = 0; i < offset.length; i++) {
  if (y < offset[i].bottom) {
    $("#catSelect option:selected").removeAttr("selected");
    $("#catSelect option[value=#"+offset[i].id+"]").attr("selected", "selected");
    break;
  }