jquery - Jquery 与常规的 css 属性检查的不同方式

标签 jquery css

我想知道这两个代码有什么区别

$('.stars li').each(function(i){

  if(this.style.display !== 'none'){
    this.style.display = 'none';
    return false;
  }
});

和这段代码

$('.stars li').each(function(i){

  if($(this).css('display', '')){
    $(this).css('display' = 'none');
    return false;
  }
});

为什么第一个遍历每个 li 元素,而第二个却不停留在第一个元素上?

最佳答案

$(this).css('display', '')

是一个计算值的表达式 - 它的计算结果是 $(this) jQuery 对象,它的 display 也发生了变化。所以条件

if($(this).css('display', '')){

总是会被满足,因为对象是真实的。

使用 $(this).css('display') === 'none' 代替(一个 参数)来检索当前计算的 display 样式。

if ($('div').css('display') === 'none') {
  console.log('Div hidden');
} else {
  console.log('Div not hidden');
}

if ($('span').css('display') === 'none') {
  console.log('Span hidden');
} else {
  console.log('Span not hidden');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div></div>
<span style="display: none"></span>

请记住

this.style.display

检查元素本身的 display 属性,而

$('div').css('display')

检查 computed display 属性。尽管没有元素的 display 属性,该元素仍可能应用了 display(例如,来自像 div { display: none } 这样的 CSS)自己的 style 对象。

关于jquery - Jquery 与常规的 css 属性检查的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58074020/

相关文章:

javascript - 使用js或jquery重启转场效果

javascript - 无法将元视口(viewport)宽度设置回屏幕宽度

jquery - MVC jQuery 日期选择器返回 dd/MM/yyyyyyyy

jquery - is_valid() 返回 True 但模型形式不会被保存

javascript - 有没有正确的方法来制作响应式文本?

javascript - 从自定义响应加载数据表

HTML 宽度比页面宽 100%

html - JSF 2.0 图形图像 : set background-image by css

jQuery 根据其值设置元素背景颜色

css - 子元素移动父 div