为什么 replaceWith() 的触发方式与 css() 不同?

Why does replaceWith() not trigger the same way as css()?

我正在尝试在您滚动到图片顶部时触发固定 div 内容的更改。

$(window).scroll(function() {
    var y_scroll_pos = window.pageYOffset;

    var img_position = $('img').position();

    if(y_scroll_pos > img_position.top) {
        $(".fixed").replaceWith(
            "<p>Goodbye!</p>"
        );
    }

    else {
        $(".fixed").replaceWith(
            "<p>Hello!</p>"
        );
    }

[...]

这仅在您的 window 在加载时滚动到该点或以下时才有效,即使 window.pageYOffset 显然在您滚动时不断变化。

但是这个例子,使用 css(),应该改变。

if(y_scroll_pos > img_position.top) {
        $(".fixed").css(
            "background-color","red";
        );
    }

    else {
        $(".fixed").css(
            "background-color","yellow";
        );
    }

[...]

为什么?这两种方法有什么区别?

既然只能更改所需的内容,为什么还要完全更改 HTML?

jQuery(function( $ ){ // (DOM is now ready)

    var $img = $('img');                 // Cache your elements outside of expensive
    var $fixedP = $('.fixed').find("p"); // scroll events

    $(window).scroll(function() {
        var pastTop = window.pageYOffset > $img.position(); // Boolean value        
        $fixedP.text(pastTop ? "Goodbye!" : "Hello!" )
               .css({background: pastTop ? "red" : "yellow"});
    }

});