在不影响其他元素的情况下动态更改 div 之间的页面内容

Posted

技术标签:

【中文标题】在不影响其他元素的情况下动态更改 div 之间的页面内容【英文标题】:Dynamically change page content between divs without affecting other elements 【发布时间】:2021-04-10 07:27:25 【问题描述】:

我正在尝试创建一个将加载内容的页面,而不是在单击链接后将用户重定向到新页面。我已经尝试过使用 ajax 但我仍然被重定向到另一个页面 这是我到目前为止所做的事情

<html lang="en" dir="ltr">
<head>
    <meta charset="utf-8">
    <title>Page</title>
</head>
<body>
    <div class="header">
        <p> welcome page</p>
        <nav>
            <ul>
                <li><a href="home.html">home</a> </li>
                <li> <a href="about.html">About</a> </li>
            </ul>
        </nav>
        <p>Hello page</p>
        <div id="content">
            <p>Content is loaded here</p>
        </div>
        <script type="text/javascript">
            $(document).ready(function() 
                $("ul.nav li a").click(function(e) 
                    e.preventDefault();
                    var url = $(this).attr('href'); //get the link you want to load data from
                    $.ajax(
                        type: 'GET',
                        url: url,
                        success: function(data) 
                            $("#content").html(data);
                        
                    );
                );
            );
        </script>
</body>
</html>  

谁能帮忙!

【问题讨论】:

【参考方案1】:

几个问题。

首先,jquery 选择器不正确,因此您没有将点击侦听器附加到正确的元素nav li a

其次,由于您使用的是浏览器将遵循的 href 属性,因此您需要在点击监听器中 return false 以防止此类行为

$(document).ready(function()
$("nav li a").click(function(e)
    e.preventDefault();
    var url = $(this).attr('href'); //get the link you want to load data from
    $.ajax(
     type: 'GET',
     url: url,
     success: function(data) 
        $("#content").html(data);
    
   );
   return false;
 );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<head>
  <meta charset="utf-8">
  <title>Page</title>
</head>
<body>
  <div class="header">
    <p> welcome page</p>
    <nav>
      <ul>
        <li><a href="home.html">home</a> </li>
        <li> <a href="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">About</a> </li>
      </ul>
    </nav>
    <p>Hello page</p>

    <div id="content">
      <p>Content is loaded here</p>
    </div>
</body>
</html>

【讨论】:

点击链接后没有任何返回 可能存在其他问题,例如 CORS,具体取决于您的具体设置。您需要检查浏览器控制台。我已经修改了上面的内容以从 cdn(可以直接访问)返回文本,以表明原始问题已解决。点击“关于”进行测试 是的,你的 CORS 是正确的。我已经进行了一些谷歌搜索,我被告知我的 about 和 home 链接上的页面应该直接从网络服务器而不是我的磁盘加载。我正在使用 apache 网络服务器,它已启动并正在运行,但我就是想不通如何从 Web 服务器加载 html 文件【参考方案2】:

您使用的选择器不正确; nav 是一个元素,而不是一个类。因此,您可以使用以下任何一种:

ul li a OR
ul > li > a OR
nav ul li a OR
nav > ul > li > a OR
nav a
//etc

您还需要包含 jQuery - 确保以下内容出现在您的 JS 之前:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

最后,您的 HTML 格式不正确div.header 没有结束标签:

</div>

可以在脚本标签之前插入。

您的 JS 代码的其余部分是正确的,并且在您更正选择器后应该可以工作,但我建议您考虑使用 .load() 方法以使其简洁:

$(document).ready(function() 
    $('nav ul li a').on('click', function( e ) 
        e.preventDefault();
        let url = $(this).attr('href');
        $('#content').load(url);
    );
);

【讨论】:

以上是关于在不影响其他元素的情况下动态更改 div 之间的页面内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在不更改子元素的情况下更改元素的文本?

如何在不更改子元素的情况下更改元素 innerText

如何在不影响背景的情况下更改网页内容?

如何在不影响 QDockWidget 的情况下更改 QMainWindow 分隔符的宽度

如何在不影响先前视图的情况下更改 UINavigationBar 标题的名称?

如何在不影响带有 html/css 的子元素的情况下应用不透明度?