【问题标题】:jquery: shorter code (if & var)jquery:更短的代码(if & var)
【发布时间】:2013-01-28 06:50:49
【问题描述】:

这可能是一个愚蠢的问题,但我有一个问题不是代码无法运行 - 而是代码太长了......

一切正常,但例如有没有办法缩短 if/else ? 或者是否可以使用更短的代码跟踪 4 个不同的 var

var transitionState_N = '-';
var transitionState_X = '-';
var transitionState_Y = '-';
var transitionState_Z= '-';

// carousel 4way
function carousel_4way_N (n, el, m) {
    var carousel = '#carousel-4way-nav-' + n
    var carousel_content = '#carousel-4way-' + n
        if (transitionState_N == '-')
          {
          transitionState_N = '+';
          }
          else
          {
          transitionState_N = '-';
          }
        $(carousel_reset).hide();
        $(carousel).transition(
        {y: m + '=10',delay:200}
        );
        };

function carousel_4way_X (n, el, m) {
    var carousel = '#carousel-4way-nav-' + n
    var carousel_content = '#carousel-4way-' + n
        if (transitionState_X == '-')
          {
          transitionState_X = '+';
          }
          else
          {
          transitionState_X = '-';
          }
        $(carousel_reset).hide();
        $(carousel).transition(
        {y: m + '=10',delay:200}
        );
        };

function carousel_4way_Y (n, el, m) {
    var carousel = '#carousel-4way-nav-' + n
    var carousel_content = '#carousel-4way-' + n
        if (transitionState_Y == '-')
          {
          transitionState_Y = '+';
          }
          else
          {
          transitionState_Y = '-';
          }
        $(carousel_reset).hide();
        $(carousel).transition(
        {y: m + '=10',delay:200}
        );
        };

function carousel_4way_Z (n, el, m) {
    var carousel = '#carousel-4way-nav-' + n
    var carousel_content = '#carousel-4way-' + n
        if (transitionState_Z == '-')
          {
          transitionState_Z = '+';
          }
          else
          {
          transitionState_Z = '-';
          }
        $(carousel_reset).hide();
        $(carousel).transition(
        {y: m + '=10',delay:200}
        );
        };

$('#carousel-4way-nav-1').click(function(event){
    $(carousel_reset_nav).not(this).transition(
    {y:0});
    return carousel_4way_N(1, this, (transitionState == '-') ? '+' : '-');
    event.preventDefault();
});

$('#carousel-4way-nav-2').click(function(event){
    $(carousel_reset_nav).not(this).transition(
    {y:0});
    return carousel_4way_X(2, this, (transitionState == '-') ? '+' : '-');
    event.preventDefault();
});

$('#carousel-4way-nav-3').click(function(event){
    $(carousel_reset_nav).not(this).transition(
    {y:0});
    return carousel_4way_Y(3, this, (transitionState == '-') ? '+' : '-');
    event.preventDefault();
});

$('#carousel-4way-nav-4').click(function(event){
    $(carousel_reset_nav).not(this).transition(
    {y:0});
    return carousel_4way_Z(4, this, (transitionState == '-') ? '+' : '-');
    event.preventDefault();
});

【问题讨论】:

  • 你应该把这个问题发到codereview.stackexchange.com
  • 通常如果我有这样的代码,我会寻找本质上相同的部分并将它们放入函数中,这样代码只存在一次。
  • event.preventDefault() 是死代码(在return 之后)。还有很多未使用的变量

标签: jquery variables if-statement shortcut shorthand-if


【解决方案1】:

我会这样做: 一方面,您可以将 click() 函数分配给所有元素。然后,您可以获取每个元素的 id 并提取最后一个数字字符。

$('#carousel-4way-nav-1, #carousel-4way-nav-2,#carousel-4way-nav-3, #carousel-4way-nav-4').click(function(event){
    $(carousel_reset_nav).not(this).transition(
    {y:0});
    return carousel_4way(($(this).attr('id')).substring(this.length -1), this, (transitionState == '-') ? '+' : '-');
    event.preventDefault();
});

现在所有这些都将调用相同的函数:

function carousel_4way(n, el, m) {
    var carousel = '#carousel-4way-nav-' + n
    var carousel_content = '#carousel-4way-' + n
        switch(n){
            case 1:
               transitionState_N  = (transitionState_N == '-') ? '+' : '-';
            case 2:
               transitionState_X = ...
            ...
        }
     $(carousel_reset).hide();
     $(carousel).transition(
        {y: m + '=10',delay:200}
     );
};

您可能需要研究一种语法,但您了解大致的概念

【讨论】:

  • 这很好。我一定会实现这一点。但是你能解释一下如何用一个 var 获取多个变量吗?因为在这段代码中有 transitionState_N - 我还需要有 _X _Y _Z 并且这些需要单独跟踪。
  • 对不起,刚刚注意到它不是自我解释的(编辑上面的代码)你仍然会有所有四个变量,你将使用 switch 语句遍历它们
【解决方案2】:

三元运算符使它更具可读性:

transitionState_N  = (transitionState_N == '-') ? '+' : '-';

您的功能确实是重复的。寻找你经常重复的代码并编写一个函数来替换它。

【讨论】:

  • 哈,我在点击时使用了它,但不知道它到底是什么,因为这是在另一个 stackoverflow 用户帮助下完成的。我在哪里可以找到这方面的文档?
猜你喜欢
  • 2012-11-28
  • 1970-01-01
  • 2014-12-10
  • 2013-01-24
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多