如何编写更好的jquery代码?

时间:2018-01-16 07:45:52

标签: javascript jquery

$("#anch1").click(function() {
    $('html, body').animate({
        scrollTop: $("#mydiv1").offset().top
    }, 1000);
   });

   $("#anch2").click(function() {
    $('html, body').animate({
        scrollTop: $("#mydiv2").offset().top
    }, 1000);
   });

   $("#anch3").click(function() {
    $('html, body').animate({
        scrollTop: $("#mydiv3").offset().top
    }, 1000);
   });

这是一个简单的jquery代码,可以滚动到页面中的特定div,但看起来很长,所以有没有一个简单的方法来编写这个jquery代码?

6 个答案:

答案 0 :(得分:3)

如果你真的在你的ID结尾使用数字......这可能是一个好主意,然后使用它们!

我建议您使用一个字符将数字与其余字符分开...
下面,我使用了_.split方法来获取数字 这样,您可以拥有多个数字。



$("#anch_1,#anch_2,#anch_3").click(function() {
  var EndNumber = $(this).attr("id").split("_")[1];
  console.log(EndNumber);
  
  $('html, body').animate({
    scrollTop: $("#mydiv_"+EndNumber).offset().top
  }, 1000);
});

div{
  height:800px;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<a id="anch_1">One</a> <a id="anch_2">Two</a> <a id="anch_3">Three</a><br>
<br>

<div id="mydiv_1">Div #1</div>
<div id="mydiv_2">Div #2</div>
<div id="mydiv_3">Div #3</div>
&#13;
&#13;
&#13;

作为选择器......如果开头始终相同,例如anch_,则可以使用attribute selector和&#34;以&#34;开头运营商:^=

那将是$("[id^='anch_']"),而不是$("#anch_1,#anch_2,#anch_3")

答案 1 :(得分:2)

你可以把它写成循环。

for (var i = 1; i <= 3; i++) {
  $("#anch" + i).click(function() {
    $('html, body').animate({
      scrollTop: $("#mydiv" + i).offset().top
    }, 1000);
  });
}

答案 2 :(得分:1)

   function scroll(elementId) {
    $('html, body').animate({
        scrollTop: $(elementId).offset().top
    }, 1000);
   }

   $("#anch1").click(scroll.bind(null, "#mydiv1"));
   $("#anch2").click(scroll.bind(null, "#mydiv2"));
   $("#anch3").click(scroll.bind(null, "#mydiv3"));

答案 3 :(得分:1)

由于您在所有这些元素上执行相同类型的功能,因此最好将选择器从html元素的各个ID(例如#anch2#mydiv1)更改为各自的课程。这样,您就可以立即在所有元素上调用clickanimate函数。

答案 4 :(得分:0)

试试这个:

$('[id^=#anch]').click(function() {
    var id = $(this).attr("id").split("");
    id = id[id.length - 1];
    $('html, body').animate({
        scrollTop: $("#mydiv" + id).offset().top
    }, 1000);
});

答案 5 :(得分:0)

这样的事可能是因为它在所有3上做同样的事情?

function myFunc(eleID) {
    $('html, body').animate({
        scrollTop: $(eleID).offset().top
    }, 1000);
}

for (var i = 1; i <= 3; i++) {
    $("#anch"+i).click(function() {
        myFunc($("#anch"+i));
    });
}

发布后已注意到已经有关于循环和函数的建议