推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
cc7756789

点击某一事件让其改变 style,但让其他区域恢复原本 style,求思路

  •  
  •   cc7756789 · Sep 26, 2015 · 3964 views
    This topic created in 3880 days ago, the information mentioned may be changed or developed.
    <div class="exp-about exp-left-block">
         <p class="exp-left-pagh">声明与条款</p>
        <div class="exp-over-upright"></div>
    </div>
    
    <div class="exp-change-log exp-left-block">
         <p class="exp-left-pagh">更改日志</p>
         <div class="exp-over-upright"></div>
    </div>
    
    <div class="exp-other exp-left-block">
         <p class="exp-left-pagh">赞助商</p>
         <div class="exp-over-upright"></div>
    </div>
    

    JS 和 HTML 无关

    function add3Events(){
      for (var i=0; i < bar_list.length; i++) {
        bar_list[i].onclick = function(num) {
    
            return function() {
             // 点击改变 css
              this.getElementsByTagName('div')[0].style.display = 'block';
              this.style.backgroundColor = '#00A2CA';
              this.style.color = '#ffffff';
    
             // 其他 div 恢复默认 css
              [].forEach.call(bar_list, function(ele, index, arr) {
                if (index == num) return;
                ele.getElementsByTagName('div')[0].style.display = 'none';
                ele.style.backgroundColor = '#F4F4F4';
                ele.style.color = '#333333';
              });
            };
    
         }(i);
    
      }
    }
    

    像这样的选中某个 div ,此 div 的样式改变。但是其他区域只有用循环这种死方法,然后判断不是当前 div 的其他 div 的样式恢复正常。这样感觉太烦了,有没有好一点的方法呢,求思路。

    Supplement 1  ·  Sep 26, 2015
    确实应该反过来,一时间脑子转不过弯
    12 replies    2015-09-27 08:40:34 +08:00
    jugelizi
        1
    jugelizi  
       Sep 26, 2015
    addclass removeclass
    viko16
        2
    viko16  
       Sep 26, 2015 via Android
    为什么不能反过来呢,先全部都恢复,再对那只特殊的进行处理
    Septembers
        3
    Septembers  
       Sep 26, 2015 via Android
    likai
        4
    likai  
       Sep 26, 2015
    将 style 写成 class.然后参考 @jugelizi @viko16
    learnshare
        5
    learnshare  
       Sep 26, 2015
    参考 #2 ,先抹平,然后再处理特定项
    breeswish
        6
    breeswish  
       Sep 26, 2015
    先用 jQuery 的批量处理特性
    再用 #2 说的先全部取消再特殊处理

    只需 2 行:
    $(.....).removeClass('....');
    $(this).addClass('....');
    breeswish
        7
    breeswish  
       Sep 26, 2015
    或者,对于一定只有一个处于激活状态的,也可以用 lastXXX

    比如

    var lastActivatedTab = null;
    ....
    ....
    tab.onclick = function () {

    if (lastActivatedTab !== null) {
    // do somthing to `lastActivatedTab`
    }

    // do something to `this`
    lastActivatedTab = this;

    }
    jiongxiaobu
        8
    jiongxiaobu  
       Sep 26, 2015 via Android
    GeekTest
        9
    GeekTest  
       Sep 26, 2015 via Android
    头像好评
    alexsunxl
        10
    alexsunxl  
       Sep 26, 2015
    alexsunxl
        11
    alexsunxl  
       Sep 26, 2015   ❤️ 1
    @breeswish 我能用一行 $(this).addClass(cls).siblings().removeClass(cls);
    如果需要返回$(this),就这样 $(this).addClass(cls).siblings().removeClass(cls).end()
    vitovan
        12
    vitovan  
       Sep 27, 2015 via Android
    Not 选择器。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1072 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 18:42 · PVG 02:42 · LAX 11:42 · JFK 14:42
    ♥ Do have faith in what you're doing.