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

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

  •  
  •   cc7756789 · Sep 26, 2015 · 4258 views
    This topic created in 4060 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
    jugelizi
    Sep 26, 2015
    1
    addclass removeclass
    viko16
    viko16
    Sep 26, 2015 via Android
    2
    为什么不能反过来呢,先全部都恢复,再对那只特殊的进行处理
    Septembers
    Septembers
    Sep 26, 2015 via Android
    3
    likai
    likai
    Sep 26, 2015
    4
    将 style 写成 class.然后参考 @jugelizi @viko16
    learnshare
    learnshare
    Sep 26, 2015
    5
    参考 #2 ,先抹平,然后再处理特定项
    breeswish
    breeswish
    Sep 26, 2015
    6
    先用 jQuery 的批量处理特性
    再用 #2 说的先全部取消再特殊处理

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

    比如

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

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

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

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