在这里使用切换/案例陈述

时间:2016-02-03 16:22:37

标签: javascript jquery

我希望修改我的javascript文件并消除任何不必要的东西。现在,它看起来非常可怕(或者至少我认为它确实如此)。

我想知道使用switch语句和几个cases是否是一个好主意 - 但说实话,我甚至不知道从哪里开始或如何写下必要的代码。

我知道它的基本语法,但在这种情况下不知道如何应用它。

switch () {
    case '':
        // code here
        break;
    case '':
        // code here
        break;
    default '':
        // code here
        break;
}

或者以完全不同的方式写这个是否更可行。

无论如何,这是我目前在js文件中的内容......

JS:

$('a.screenshots_1').click(function() {
    $('.t_1, .t_2, .t_3, .t_4, .t_5, .t_6, .t_7, .t_8, .t_9, .t_10, .t_11, .t_12, .t_13, .t_14, .t_15, .t_16, .t_17, .t_18, .t_19, .t_20, .t_21, .t_22, .t_23, .t_24').hide();
    $('#main-overlay, .t_1').show();

    return false;
});

我在这个文件中总共有24个...并且觉得它可以大大缩短......我只是不知道我会怎么做。

$('a.screenshots_2').click(function() {
    $('.t_1, .t_2, .t_3, .t_4, .t_5, .t_6, .t_7, .t_8, .t_9, .t_10, .t_11, .t_12, .t_13, .t_14, .t_15, .t_16, .t_17, .t_18, .t_19, .t_20, .t_21, .t_22, .t_23, .t_24').hide();
    $('#main-overlay, .t_2').show();

    return false;
});

正如您所看到的,a.screenshots_#$('#main-overlay, .t_#).show();会发生变化 - 其中#是一个数字(从1到24列出)

非常感谢任何反馈。

更新

jsFiddle根据要求。

第二次更新:

我在这里要做的就是简化我的js文件。我总共有24个实例(或案例),我想看看我是否可以将其归结为1个实例(或案例),但适用于所有24个实例...希望这是有道理的。简而言之,我试图从我所拥有的代码中编写更清晰的代码(如果可能的话)并且不在我的html / css文件上添加任何其他内容(如果能够)。

我认为这是一个例子:

$('a.screenshots_1').click(function() {
        $('.t_1, .t_2, .t_3, .t_4, .t_5, .t_6, .t_7, .t_8, .t_9, .t_10, .t_11, .t_12, .t_13, .t_14, .t_15, .t_16, .t_17, .t_18, .t_19, .t_20, .t_21, .t_22, .t_23, .t_24').hide();
        $('#main-overlay, .t_1').show();

        return false;
    });

这是第二个实例:

$('a.screenshots_2').click(function() {
        $('.t_1, .t_2, .t_3, .t_4, .t_5, .t_6, .t_7, .t_8, .t_9, .t_10, .t_11, .t_12, .t_13, .t_14, .t_15, .t_16, .t_17, .t_18, .t_19, .t_20, .t_21, .t_22, .t_23, .t_24').hide();
        $('#main-overlay, .t_2').show();

        return false;
    });

依此类推......

3 个答案:

答案 0 :(得分:0)

您的代码$('.t_1, .t_2, .t_3, .t_4, .t_5, .t_6)等可能具有相同的类(例如.toBeHidden)和您的$('a.screenshots_1'), $('a.screenshots_2'), $('a.screenshots_3')等。也是同一个类(让我们说.screenshot)所以你可以像那样重写你的代码

$('screenshot').click(function() {
    $('.toBeHidden').hide();
    $('#main-overlay, .t_2').show();
    return false;
});

答案 1 :(得分:0)

您可以将数据目标添加到屏幕截图类

<a class="screenshots_2" data-target="t_2">...</a>

然后你可以这样做:

$('a[class^="screenshots_"]').on('click', function () {
  $('[class^="t_"]').hide(); // You could also add a common .thumb class to target more efficiently
  $('#main-overlay, .' + $(this).data('target')).show();
});'

或者,你可以像这个小提琴一样更通用:

https://jsfiddle.net/scottux/0rmgzh7v/

$('.screenshot').on('click', function () {
  var idx = $(this).attr('class').match(/_(\d)/)[1];
  $('.thumb').hide();
  $('.t_'+idx).show();
});

如果您不想编辑HTML https://jsfiddle.net/scottux/ys4edLvf/7/

// bind to all anchors with a class that begins with screenshots_
$('a[class^="screenshots_"]').on('click', function() { 
  // pull the number from this element's class name
  var idx = $(this).attr('class').match(/_(\d)/)[1];
  // hide anything where the class begins with t_
  $('[class^="t_"]').hide();
  // show the corresponding t_ to the number we pulled off this screenshot element
  $('#main-overlay, .t_'+idx).show(); 
  return false;
});

答案 2 :(得分:0)

一种简单的方法是为相应的 a 标记和 t _#元素组合设置一个公共类

HTML:

您的View屏幕截图链接应该是这样的

<a class="screenshots t_22" href="#" title="View Screenshots"></a>

你的div应该拥有toHide类,跟随由现有的t_ #class

<div class="toHide t_22">
    ...
</div>

JS:

$('a.screenshots').click(function() {
    $(".toHide ").hide();
    var clickedClass = this.classList[1];
    $('#main-overlay, .'+ clickedClass).show();

    return false;
});

element.classList返回标记中出现的类数组。因此,数组的第一个索引将返回字符串 t _#

.toHide用于标识要隐藏的所有元素。 Here's小提琴