如果没有更改,jQuery是否会在.css()调用上重新绘制页面?

如果没有更改,jQuery是否会在.css()调用上重新绘制页面?,jquery,html,css,Jquery,Html,Css,所以,就页面速度而言,我们都知道,操纵页面会迫使它重新绘制,这对浏览器来说是一种负担。如果我有一个应用了css的div: div{ position: static; } 并将其更改为 div{ position: fixed; } 它将刷新页面并更改布局。但是,我的问题是,如果div已经对其应用了修复,并且我执行了 jQuery('div').css('position', 'fixed'); 它会导致重新绘制,还是会看到它已经设置好并沿着它的快乐之路前进 谢谢你的帮助

所以,就页面速度而言,我们都知道,操纵页面会迫使它重新绘制,这对浏览器来说是一种负担。如果我有一个应用了css的div:

div{
    position: static;
}
并将其更改为

div{
    position: fixed;
}
它将刷新页面并更改布局。但是,我的问题是,如果div已经对其应用了修复,并且我执行了

jQuery('div').css('position', 'fixed');
它会导致重新绘制,还是会看到它已经设置好并沿着它的快乐之路前进


谢谢你的帮助

不应该,但这是一种浏览器行为,而不是jQuery行为。如果渲染引擎没有收到属性更新,我不明白为什么它会重新绘制任何内容。

.css()
doElement.style
向元素添加内联样式,在您的例子中,
div
的样式不是内联的,在
jQuery('div').css('position','fixed')命令DOM树将更改。浏览器绝对会重新绘制(呈现)页面

我不确定,但我猜即使相同的
样式
出现在DOM树中,并且您重新指定
样式
浏览器,也会再次呈现页面。

jQuery
.css()
调用将更改DOM元素,但由浏览器重新绘制任何内容

下面是Mozilla关于重画的一篇有趣的文章:(注意,我链接到了“回流原因”部分)

更新

在您为已经具有
位置:固定的
元素设置
位置:固定的
的情况下,由于重绘,不会有太多开销。具有
position:fixed
position:absolute
的元素将从DOM的正常流中删除,当对它们进行操作时,不会触发整个DOM重画。相反,只重绘元素本身和任何重叠元素


另一方面,如果您正在制作任何动画,这一点很重要,因为动画会导致大量重画,如果您没有设置
position:fixed
position:absolute
,则动画中的每个步骤都会重画整个DOM。另外,由于此元素的重绘具有递归性质,因此任何具有“显示:表格”的元素重绘可能需要三倍的时间(停止使用表格进行布局:)

因此,为了安全起见,除非必要,不要更改属性

if(jQuery('div').css('position') != 'fixed')
    jQuery('div').css('position', 'fixed');

这种行为不是jQuery的选择。该库只操作DOM,并依赖浏览器在其认为合适时更新其窗口。我想我应该稍微回答一下这个问题,jQuery是否会对其应用“修复”,或者是否会看到它已经修复,并且什么也不做?jQuery(自1.7.1版起)不会检查样式是否已应用于元素(可能是出于性能方面的原因)。很好地指出它将脱离流程。我想问题更多地集中在“jQuery是否会在再次应用之前检查样式是否已经应用?”不管是固定的、绝对的等等,它会仅仅看到应用了X样式而什么也不做,还是会盲目地应用CSS,如果浏览器认为合适的话,可能会重新绘制?