【问题标题】:How do I auto-reload a section of the page with jQuery without refreshing entire page?如何在不刷新整个页面的情况下使用 jQuery 自动重新加载页面的一部分?
【发布时间】:2010-09-18 03:06:48
【问题描述】:

所以有几件事我想做。我有一段 HTML 希望默认显示在页面上(即第一次加载时)。

<div class="viewport">
        <ul class="overview">           
            <li><img src="images/1.png" /></li>
            <li><img src="images/2.png" /></li>
            <li><img src="images/3.png" /></li>         
            <li><img src="images/4.png" /></li>
            <li><img src="images/5.png" /></li>
            <li><img src="images/6.png" /></li>
            <li><img src="images/7.png" /></li>         
        </ul>
    </div>

但是,在单击一个图标时,我希望在更新了 javascript 的 sn-p 时重新加载此部分。

图标的代码是:

<a href="#"><img src="images/2.png" id="icon#2"></a> | 
<a href="#"><img src="images/3.png" id="icon#3"></a> | 
<a href="#"><img src="images/4.png" id="icon#4"></a> | 

更新的JS sn-p是:

var win_width = $(window).width();
var num_of_images = 2; // This should be changed to 3, when 3 is clicked, and 4 when 4 is clicked, etc.

所以它应该只重新加载页面上的“视口”div...而不是整个页面。

想法?

【问题讨论】:

  • 它在重新加载什么?它是从其他地方获取新内容还是隐藏某些内容?
  • 嗯,发生的事情是 jquery 变量 'num_of_images' 设置为 2,第一组 HTML 仅显示其中 2 个图像。我想要发生的是,当您单击 3 时,您会看到其中 3 个图像而不是 2 个。4 也应该发生同样的情况。
  • 我用解决方案更新了我的答案。有空就去看看吧!

标签: javascript jquery html css


【解决方案1】:
    $(function () {

        var num_of_images = 2,
            showAndHide;

        $("img[id^=icon]").bind("click", function () {
            num_of_images = parseInt(this.id.replace("icon#", ''), 10);
            showAndHide(num_of_images);
        });

        (showAndHide = function (n) {
            $("ul.overview").hide() // hide this while we "do work"
               .children() // get children
                  .show() // show all children
                  .filter(":nth-child(" + n + ") ~ li") // get the next siblings of the nth child
                     .hide() // hide them
                  .end()
               .end()
            .show(); // show the parent list
        })(num_of_images)

    });

这是一个“待定”的解决方案。我没有对此进行测试,如果它有效,我会感到惊讶。

编辑:好的,我测试并修复了一些东西,这似乎有效。

请注意,我为这些img 元素附加了一个点击处理程序。因此,如果您不想要这些锚标记,则不需要它们。

【讨论】:

    【解决方案2】:

    如果您只想重新加载包含 HTML 内容的页面的一部分(不添加 JavaScript),那么您可以使用 .load()

    $('div#content').load('morecontent.php');
    

    【讨论】:

    • 假设我想在 jquery 函数中对 HTML 进行硬编码?第一个问题是,如果我这样做而不是加载单独的文件,是否会有负载命中?第二个问题是,我该怎么做?只需将 .html() 函数链接到该行?
    • 如果你想硬编码 HTML,是的,使用 .html() 函数
    • 不需要 HTML 函数,加载函数会为您替换 HTML 块。在线查看 load() 的示例,或自己尝试。在您的一个页面上使用 google chrome 的 JavaScript 控制台是试验 jquery 并找出适合您的情况的好方法,您只需键入 jquery 命令并以交互方式查看结果。
    • 加载一个单独的文件会向服务器提交一个新请求(使用 .load())。如果您对内容进行硬编码,则不会向服务器发送请求。如果您要添加大量 HTML,我不会将其硬编码到 JavaScript 中...另一种方法是使用模板系统将 HTML 结构添加到页面中(请参阅blog.jbstrickler.com/2010/07/jquery-templates-by-microsoft
    【解决方案3】:

    您希望$('.viewport').load('/url') 将视口的内容替换为服务器从 /url 返回的新 HTML 块。您在页面加载时调用该加载函数一次,并在您想要替换视口的内容时再次调用。您可能希望在您使用的任何模板语言中执行一些包含类型魔术,以便您可以跳过初始加载并在一个请求而不是 2 中呈现初始页面。您在更改事件中触发加载函数或您页面上的其他类型的事件。

    【讨论】:

    • 我暂时没有使用模板语言。只是直接的 html、css 和 jquery。那么我是否必须创建一个仅包含该内容的独立 html 文件并像那样加载它?此外,仅用于加载目的的 html 文件,是否有常规的 标签?
    猜你喜欢
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2016-09-04
    • 2013-08-22
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多