我如何 "refire" jQuery(window).resize(checkSize)?

How do I "refire" jQuery(window).resize(checkSize)?

我正在尝试根据 CSS 规则为 500 像素及更小的屏幕添加和删除 类。在CSS中,我使用

@media (max-width: 500px) {
.evidence img {display:none;}
}

并且这个 jQuery 函数查找 CSS 并添加和删除 类:

jQuery(document).ready(function() {
checkSize();
jQuery(window).resize(checkSize);
function checkSize(){
if (jQuery(".page-template .evidence img").css("display") == "none"){
jQuery( ".page-template .evidence .two-col").addClass("left").removeClass("two-col");
jQuery( ".page-template .evidence .right").addClass("left").removeClass("right");
} }
});

问题是当我将 window 的大小调整到超过 500px 时,jQuery 规则不会 "refire" 并阅读 CSS 类再次统治。

我已经尝试 "reverse" 他们,即

.evidence img {display:block;}

if (jQuery(".page-template .evidence-cards img").css("display") == "block"){
jQuery( ".page-template .evidence .two-col").addClass("two-col").removeClass("left");
jQuery( ".page-template .evidence .right").addClass("right").removeClass("left");
} }

有什么想法吗?我怎样才能强制 jQuery(window).resize(checkSize); 再次开火?

编辑 2019 年 6 月 5 日

回复:Daniel Beck 的回答,关键是 类 发生变化并且在调整大小 >500px 时不再用于识别 div。我无法将 类 更改为 ID,但我添加了其他保持静态的 类(未在样式表中调用),即 .change-two-col.change-right。这有效:

jQuery(document).ready(function() {
function checkSize() {
  if (jQuery(".page-template .evidence img").css("display") == "none") {
    jQuery(".page-template .evidence .change-two-col").addClass("left").removeClass("two-col");
    jQuery(".page-template .evidence .change-right").addClass("left").removeClass("right");
  } else {
    jQuery(".page-template .evidence .change-two-col").addClass("two-col").removeClass("left");
    jQuery(".page-template .evidence .change-right").addClass("right").removeClass("left");
  }
}
checkSize();
jQuery(window).resize(checkSize);
});

问题不在于函数没有触发——每当 window 调整大小时调整大小都会连续触发——问题在于函数只对 [=28= 进行 one-way 更改];它从不尝试处理图像可见的情况。

你也忘记了哪个元素是哪个:然后页面宽度小于 500px,你删除两个 div 上的标识类名并将它们替换为“.left”,所以当 window 调整为更大的尺寸,您将无法再使用原始类名匹配各个元素。解决此问题的一种方法是向 不会 更改的元素添加唯一的类名(或更好的 ID),因此您可以使用它们来识别元素:

function checkSize() {
  if (jQuery(".page-template .evidence img").css("display") == "none") {
    jQuery("#foo").addClass("left").removeClass("two-col");
    jQuery("#bar").addClass("left").removeClass("right");
  } else {
    jQuery("#foo").removeClass("left").addClass("two-col");
    jQuery("#bar").addClass("right").removeClass("left");
  }
}

checkSize();
jQuery(window).resize(checkSize);
@media (max-width: 500px) {
  .evidence img {
    display: none;
  }
}

.two-col {
  background-color: red
}

.left {
  background-color: blue
}

.right {
  background-color: green
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="page-template">
  <div class="evidence">
    <img src="https://placehold.it/100x100">
    <div id="foo" class="two-col">two-col</div>
    <div id="bar" class="right">right</div>
  </div>
</div>

(可能还值得注意的是,通过媒体查询而不是通过在 javascript 中切换类名来处理所有这些可能会更好;任何可以通过添加或删除 类 可以通过媒体查询来处理。)