javascript - 如何在隐藏/显示另一个元素时更改一个元素的 CSS(没有自定义事件)?

标签 javascript jquery html css

我有一个包含以下内容的页面:

HTML

<div class="parent">
    <div class="fbNubFlyoutOuter">
        <div class="fbNubFlyoutInner">
            <div class="predecessor"></div>
            <div class="fbNubFlyoutFooter">
                <div class="_552h hidden_elem"></div>
                <div class="other"></div>
            </div>
            <div class="successor"></div>
        </div>
    </div>
    <div class="boxMargin"></div>
    <div class="rest"></div>
</div>

现在,下面的事情发生了(都是动态发生的,所以只有一个 if-else 不会做):

  1. _552hdiv 通过分别添加/删除类 hidden_​​elem 来显示/隐藏。

  2. 现在,只要有 hidden_​​elem 类,我就会尝试将 boxMargin 的 CSS 更改为 background-color:red;添加到 _552h。否则,boxMarginbackground-color:green;

CSS 就像:

._552h {
    background-color:yellow;
    border:1px solid black;
    height:50px;
    width:50px;
}
._552h.hidden_elem {
    display:none;
}
.boxMargin {
    height: 50px;
    width: 50px;
    border:1px solid black;
    background-color:green; /*should be become red when _552 is hidden*/
}
/*Maybe add a .boxMargin hidden class rule, where bkg color is red*/

注意:我将无法创建自定义事件,因为它需要我触发它们,这对我来说是不可能的,因为显示/隐藏是由一些我无法编​​辑的其他脚本发生的.另外,我不打算使用 jQuery 的 attrchange 插件。

这可以通过以某种方式为 _552h 绑定(bind) show/hide 事件来解决。

我已经在 SO 上查看了一些解决方案,但其中大部分涉及创建自定义隐藏/显示事件并触发它们,正如我所提到的,这是不可能的。

另外,我看到了这个:https://stackoverflow.com/a/19525797/3751213 .但它没有被解雇,我不知道为什么。

可以有简单的 CSS 解决方案吗?(可能是通过 parent 或兄弟选择)

或者,我将不得不使用 attrchangeDOMListeners(for attributes) 或自定义事件?如果是这样,我将如何获得它?

我提到的链接,我在这里试过: JSFIDDLE

由于情况可能令人困惑,因此将编辑问题以提供所需的所有信息。

编辑

如果我能使 fiddle 工作也很好。

最佳答案

在您的情况下,_552h 元素可见性的显示不是由 show 或 shide 事件管理的,因此将行为绑定(bind)到这些方法对您没有帮助。

如果一些其他代码正在添加或删除类 hidden_​​elem,也许您可​​以监听 addClass 或 removeClass 方法。

(function ($) {
      $.each(['addClass','removeClass'], function (i, ev) {
        var el = $.fn[ev];
        $.fn[ev] = function () {
          this.trigger(ev);
          return el.apply(this, arguments);
        };
      });
    })(jQuery);

jQuery(document).ready(function() {
    jQuery(document).on('removeClass','._552h',function() {
          jQuery('.boxMargin').css('background-color','green');
    });

    jQuery(document).on('addClass','._552h',function() {
        jQuery('.boxMargin').css('background-color','red');
    });
    jQuery('#changevisibility').click(function() {
        if(jQuery('._552h').hasClass('hidden_elem')) {
            jQuery('._552h').removeClass('hidden_elem');
        } else {
            jQuery('._552h').addClass('hidden_elem'); 
        }

    });

});

http://jsfiddle.net/amenadiel/YsSen/

关于javascript - 如何在隐藏/显示另一个元素时更改一个元素的 CSS(没有自定义事件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723736/

相关文章:

javascript - 当我使用 jQuery ajax 时,php 不记得变量

javascript - Bootstrap Ajax Modal 与 Google reCaptcha - 调用验证码挑战无法两次工作

javascript - 更改 Angular2 主 url

javascript - onmouseover 和超链接悬停

javascript - 如何使用Javascript向所有<audio>标签添加Google Analytics(分析)事件?

jquery - jPlayer - 简化多个实例的功能

javascript - p5.j​​s 沿多边形轨迹移动对象

html - 我可以通过 HTML 表单将 MYSQL 函数作为值传递吗?

javascript - 从 API 获取数据时如何存储数据

javascript - css背景在div高度重置时重复