隐藏一个容器,更新 innerHTML 然后再次显示它

Hiding a container, updating the innerHTML and then showing it again

我想隐藏一个容器,更新容器的innerHTML,然后再次显示容器。我知道这两种操作都是可能的,但是当结合在一起时 - innerHTML 似乎没有更新...

这是 JSFiddle - https://jsfiddle.net/definaly/k4xuscz1/58/

这可能吗?

(供讨论的附加问题 - 您认为这是在网站页面之间切换的合适的异步方式吗?这种方法有什么可能出错的地方吗?)

$('#button').click(function(){
    var content = $('.content');
    
    content.hide('slide', {direction:'left'} ,400);
    
    content.innerHTML = "<h3>Page One</h3>";

    content.show('slide', {direction:'right'} ,400);
    
});
.content{
  position: absolute;
  width: 90%;
  height: 90%;
  background-color: purple;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>

<button id="button"> Click me </button>

<div class="content">

</div>

前缀:我不是 100% 确定这是否是理想的方法,但您可以使用以下 JS 获得所需的结果。

将您的 JS 更改为:

$('#button').click(function(){
    var content = $('.content');

    content.hide('slide', {direction:'left'} ,400);
    setTimeout(function(){
        content.html("<h3>Page One</h3>");
    }, 400)

    content.show('slide', {direction:'right'} ,400);

});

这将设置基本睡眠以防止在 div 滑出屏幕时显示更改,并使用 jquery 提供的 .html() 函数一致性。

您正在使用 jQuery。改变内部 html 的 jQuery 语法不是 .innerHtml = "<blah>"

.html("<blah>")

所以把content.innerHTML = "<h3>Page One</h3>";改成content.html("<h3>Page One</h3>");

而不是 innerHTML,您只需使用 html 和 jQuery。此外,如果您更改 hide 中的持续时间但忘记在 setTimeout 中更改它,则可以不使用脆弱的 setTimeout,而是使用 setTimeout 的第四个参数=16=]方法。它需要一个函数,当隐藏动画完成时 运行。

$('#button').click(function() {
    var content = $('.content');
    
    
    content.hide('slide', {direction:'left'} ,400, function() {
        content.html("<h3>Page One</h3>");    
    });

    content.show('slide', {direction:'right'});
    
});
.content{
  position: absolute;
  width: 90%;
  height: 90%;
  background-color: purple;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>

<button id="button"> Click me </button>

<div class="content">

</div>