【问题标题】:jQuery Get Specific Content From External PagejQuery 从外部页面获取特定内容
【发布时间】:2012-08-21 20:20:14
【问题描述】:

所以我有类似的东西

<ul>
<li> <a href="123.html">123</a></li>
<li> <a href="abc.html">abc</a></li>
</ul>

这个网站在我的 INDEX.HTML 文件中。除了加载更多列表和列表项。链接到的每个 HTML 页面都有这样的部分:

<ul>
<li><strong>Time: </strong>12:00</li>
</ul>

我想要的是当用户看到 INDEX.HTML 页面时,时间被添加到末尾(来自相对链接),所以它看起来像

  • 123 - 12:00
  • ABC - 13:00

有人可以帮忙吗?我意识到我可能需要 contents() 和 fine() 但没有快速得到。所以基本上对于每个链接,我们都会转到有问题的 URL,抓住时间并将其添加到 INDEX.HTML 上的原始行

谢谢。

【问题讨论】:

  • 请提供一些 JavaScript 代码,以便我们了解您在说什么!
  • 我看不到您试图从 URL 中获取任何内容的位置。您是否尝试从 URL 获取参数?
  • 你不能做这个服务器端有什么原因吗?
  • 已更新 - 必须在 jQuery 中完成
  • 我和其他人一样喜欢 jQuery,但我仍然认为在服务器端解决您的问题会为您节省大量时间,而且从您网站的外观来看,每次页面加载需要数百个 ajax 调用。跨度>

标签: jquery jquery-ui jquery-selectors


【解决方案1】:

思路可以如下:

  1. 循环通过lis。
  2. 获取a 孩子的href 属性。
  3. 向该页面发送 ajax 请求。
  4. 使用 jQuery 解析响应并找到合适的文本。
  5. 将该文本附加到li

在 jsFiddle 上生成单独的页面并不容易,因此您必须根据自己的情况对其进行一些修改。此外,您可能希望使选择器更严格(ul strong 是我可以用您的示例弥补的最佳选择)。

http://jsfiddle.net/3JQDz/

$("li").each(function() {
    var $li = $(this);
    var href = $li.find("a").attr("href");  // use this in your real case

    $.ajax({
        type: "POST",
        url: "/echo/html/",  // this is just the way to use ajax on jsFiddle
        data: {
            html: "<ul><li><strong>Time: </strong>12:00</li></ul>"
        },
        success: function(html) {
            // full document -> only the li -> its child nodes -> the last one (the text node) -> its text
            var time = $(html).find("li").contents().last().text();
            $li.append(" - " + time);
        }
    });
});

【讨论】:

  • html: "&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Time: &lt;/strong&gt;12:00&lt;/li&gt;&lt;/ul&gt;" 是什么意思?我设法让有问题的 LI 的 ID 为“TimeID”
  • @Janusz Jasinski:在 jsFiddle 上,这是获取 ajax 响应的唯一方法。它将您的页面表示为虚拟项目。你可以在你的真实代码中省略data: {...}
【解决方案2】:

如果我理解你的问题,我相信你想加载每个内页的内容以在主菜单中显示信息。如果是这种情况,这对性能来说是个坏主意。

如果您想这样做,您首先需要使用$.get 函数加载HTML 内容。然后处理结果,搜索所需的元素。

更新

我更新了sample here。它只有一个链接,但现在与您的代码结构一起显示。

基于此,我相信您的index.html 代码将是这样的:

$("li a").each(function() {
    var src = $(this).attr("href");
    $.get(src, function(data) {
      var element = $("<div>").html(data);
      var time = element.find("li").contents().last().text();
      $("li").append(" - " + time);
    });
});

【讨论】:

  • 谢谢 - 这是我正在使用的网页 - readingfestival.com/line-up - 尝试但无处可去。也许是因为这一天很长!
  • 我用你的内部页面结构创建了另一个js.bin,然后我用新代码更新了主页。希望对你有帮助。
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
相关资源
最近更新 更多