【问题标题】:Load external element ID into DIV without jQuery's load() function在没有 jQuery 的 load() 函数的情况下将外部元素 ID 加载到 DIV 中
【发布时间】:2011-12-14 15:10:53
【问题描述】:

我在这个项目的早期问题上得到了一些很大的帮助,但现在它变得更加复杂(至少对我而言)。这是一个问答项目,其中包含一个问题、四个可能的答案以及下方的答案按钮,该按钮将在隐藏在按钮上方的 div 中显示答案。当答案实际上在 div 中时,我做得很好,但现在我需要尝试将答案从外部 HTML 文件加载到现在为空的 div 中。 jQuery 的 load() 函数在浏览器中运行良好,然而,这个项目是 iBooks 的增强型 epub 文件,显然不允许 load() 函数(但它确实允许 jQuery)。

是否有另一种方法可以在不使用 load() 的情况下将元素 ID 加载到 DIV 中?另外,既然这变得更加复杂,我如何在打开另一个 div 时切换关闭前一个 div?

jQuery:

$(function() {
    $(".answer").click(function() {
        $(this).prev(".content").load($(this).attr('href')).toggle("slow");
    return false; // And prevent it following the link
    });
});

CSS:

div.content {
    display: none; /*--hidden by default--*/
    width: 300px;
    height: auto;
    margin: 10px;
    padding: 20px;
    background: white;
    border: 1px solid black;
    cursor: pointer;
}
a.answer {
    font-family: sans-serif;
    font-weight: bold;
    font-style: normal;
    font-size: 0.92em;
    line-height: 3em;
    text-indent: 0em;
    text-align: left;
    margin: 1em 0em 0em 1em;
}

HTML:

<div class="keep">
    <p class="q"><samp class="q-no">1.</samp> Interpret the following directions:</p>
    <p class="q-equation">i cap po qid × 10d</p>
    <p class="an"><span class="choice">a.</span> Take one capsule by mouth four times a day for ten days.</p>
    <p class="an"><span class="choice">b.</span> Take one capsule by mouth three times a day for ten days.</p>
    <p class="an"><span class="choice">c.</span> Take one capsule by mouth twice a day for ten days.</p>
    <p class="an"><span class="choice">d.</span> Take one capsule by mouth once a day for ten days.</p>

    <div class="content">
    </div>

    <a class="answer" href="04b-Ch4-Answers.html #anchor-24-anchor">Answer</a>
</div>

<div class="keep">
    <p class="q"><samp class="q-no">2.</samp> Interpret the following directions:</p>
    <p class="q-equation">ii tab po tid × 7d.</p>
    <p class="an"><span class="choice">a.</span> Take two tablets by mouth four times a day for seven days.</p>
    <p class="an"><span class="choice">b.</span> Take two tablets by mouth three times a day for seven days.</p>
    <p class="an"><span class="choice">c.</span> Take two tablets by mouth twice a day for seven days.</p>
    <p class="an"><span class="choice">d.</span> Take two tablets by mouth once a day for seven days.</p>

    <div class="content">
    </div>

    <a class="answer" href="04b-Ch4-Answers.html #anchor-25-anchor">Answer</a>
</div>

提前感谢您的帮助。

【问题讨论】:

  • 任何 AJAX 请求都有效吗?如果不是,您将需要使用服务器端语言。
  • 老实说,我不确定任何 AJAX 请求是否可以在 epub 中工作。这是我唯一尝试过的。不幸的是,因为这是一个 epub 文件,服务器端语言将不适用。对于符合 EPUB3 标准的电子书来说,Javascript 本身就是一个全新的东西。

标签: jquery


【解决方案1】:

首先检查您是否遇到同源策略问题。这可以防止您通过 ajax 从与您正在运行的域不同的站点访问内容。请参阅此MDN reference 了解更多信息。

在 Chrome 等浏览器中,您可以检查调试控制台以查看它是否报告任何请求因同源问题而被阻止。

你可以使用 jQuery,但不能使用 .load() 对我来说毫无意义(这就是我怀疑这是同源策略问题的原因),但如果确实如此,你可以编写自己的迷你.load() 的版本,通过使用 ajax 获取内容,然后将结果放入您的 div 中。仅供参考,如果它是同源问题,您将无法通过这种方式解决它。您将必须有一个位于同一域上的服务器,您可以从中请求数据,并且它必须为您从其他站点获取数据。或者,您必须在另一个可以使用 JSONP 的域上拥有一个合作服务器。

【讨论】:

  • 当我在 Chrome 上测试文件时遇到问题时,我最初阅读了 MDN 参考,但问题是对于 epub 文件,所有文件都是本地文件。我无法从服务器中提取文件,因此如果是本地托管问题,则没有真正的方法可以解决。
  • 由于这对于本地托管的 epub 文件来说是一个非常受限制的问题,我建议您搜索您的 epub/iBooks 开发人员文档,看看是否有某种解决方法,因为看起来他们会想在这里提供某种解决方案,这样您就可以提供允许查看从外部世界检索到的动态数据的内容(显然在您离线时不起作用)。
  • Apple 在建议您在 epub 文件中可以做什么和不可以做什么方面并不是最有帮助的,这与应用程序开发不同。 B&N 也是如此,尤其是亚马逊被诅咒的 Fire。他们要么将规范视为神圣的灵知,要么完全忽略它。而且出版商不喜欢内容总是可用的想法。不过,我很感激你的建议。
  • 我的意思是“并不总是可用”。对不起。
  • 你能嵌入一个 iframe,它的源代码托管在你的服务器上,它有自己的 javascript 可以从该服务器执行 ajax 吗?
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 2013-01-06
  • 2014-09-17
  • 2019-04-18
  • 2012-04-12
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多