使用动态内容时防止刷新

Prevent refresh when using dynamic content

我使用基本的 JS 在没有传统 hyperlinks 的情况下更改网站上的内容。我用它来加载另一个文件中的内容并将其插入到 HTML <div> 中。每个内容页面都包含在 <div>.

<!-- Inside head -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $("#content").load("home.html");
        $("#home").click(function(){
            $("#content").load("home.html")
        });
        $("#page1").click(function(){
            $("#content").load("page1.html")
        });
        $("#page2").click(function(){
            $("#content").load("page2.html")
        });
    });
</script>

<!-- Inside body -->
<div id="content">
    <!-- Dynamic content here -->
</div>

最近我注意到这并没有严格按照我的预期工作。是的,它使用相同的页面来插入内容,但它也会刷新页面,当 link 不在页面顶部时,这有点烦人。所以必须向下滚动才能看到加载的内容。

我怎样才能实现真正动态的内容?是否需要全新的结构?

您可以通过返回 false 或阻止事件处理程序执行其默认操作来阻止 a 标记重新加载页面,例如:

$("#home").click(function()
{ 
   $("#content").load("home.html"); 
   return false;
});

$("#home").click(function(e)
{ 
   $("#content").load("home.html"); 
   e.preventDefault();
});

此外,为了简洁起见,您的 ready 处理程序可以缩短为:

// no need for $(document).ready(function(), can just be as below 
$(function() 
{
   // other stuff here after document is ready
});

正如@ScottMarcus 建议的那样,您可以只加载您的内容并默认隐藏它,然后在点击处理程序中根据点击的内容显示您的内容:

<a href="#" id="home">Home</a>
<div id="content">
  <div id="home-content">Home content here, hide it on page load with css</div>
  <div id="page1-content">Page 1 content here, hide it on page load with css</div>
  <div id="page2-content">Page 2content here, hide it on page load with css</div>
</div>

#content > div
{
  display: none;
}    

// if you dont want to hide home on page load
#home-content
{
  display: block;
}

$("#home").click(function()
{ 
   $('#content > div').hide(); // could also use .fadeOut()
   $("#home-content").show(); // could also use .fadeIn()
   return false;
});