【问题标题】:Loading external HTML page with relative paths into a DIV using jQuery使用 jQuery 将具有相对路径的外部 HTML 页面加载到 DIV 中
【发布时间】:2012-11-28 12:42:26
【问题描述】:

我对 jQuery 比较陌生,如果这个问题太简单,请原谅,但我已经搜索了数小时的多个线程,但找不到明确的解决方案。

我有以下文件夹结构:

/index.html

/html/pages/page1.html
/html/pages/images/
/html/pages/css/
/html/pages/js/
/html/pages/includes/

我正在尝试通过以下基本方式将 page1.html 加载到 index.html 中的 DIV 中:

$('#content').load('html/pages/page1.html', function () {
   console.log('loaded');
});

page1.html 加载正常,但是,它包含多个包含,并且其中的所有内容(图像、CSS、JS 等)都与 页面相关> 文件夹(例如:../images/header.jpg),因此加载到 index.html 时不会显示,因为现在所有内容都与 / 或 index.html。

我在某处读到,在 page1.html 中将所有路径设为绝对路径或相对根路径将起作用,还添加了某种全局路径变量,但是,问题是遗留内容过多并且改变这一切不是一种选择。

有没有办法在不修改任何路径的情况下按上述方式加载 page1.html,尽管它们是相对的?或者有人可以推荐一种以这种方式加载外部内容的有效方式(其他插件、技术)吗?

谢谢!

【问题讨论】:

  • 如果您只想加载 html 页面,您也可以使用 iframe 加载它。在这种情况下,page1.html 中定义的相对路径相对于页面保持不变。

标签: jquery ajax relative-path jquery-load relative-url


【解决方案1】:

如果所有内容都与pages 文件夹相关,那么您可以使用一些简单的搜索和替换。这不是最佳编程实践,因为它没有应有的灵活(在这种类型的上下文中从相对到绝对依赖于许多因素是否正常工作),但它会起作用。

$.get('html/pages/page1.html', {}, function(data, status, xhr) {
    var updatedData = data.replace(/\.\.\/(images|css|js)+/g, "http://www.mywebsite.com/html/$1");

    $('#content').html(updatedData);
});

编辑:

您还可以使用代理脚本并将所有到此文件夹的请求重写/路由到代理脚本。我不知道您使用的是什么服务器端技术,但您可以这样做:

使用.htaccess(或类似的),将指向此文件夹的所有请求重定向到代码库中的另一个脚本。在脚本中,查找传入脚本的路径,加载原始输出内容,执行搜索/替换并将内容输出到缓冲区。此外,您可以在服务器上设置缓存,以便客户端缓存请求,从而降低您可能遇到的处理开销(不过,我预计这会相当小)。

【讨论】:

  • 我想过这样的事情,但问题是在单独的CSS文件中也有很多内容,主要是背景图片,以及一些路径,(用于Flash内容)嵌入在JavaScript中.这就是我被卡住的原因。
  • 我可以帮助 PHP,但不幸的是 JSP 不能。我确实给出了如何实现这一点的一般框架想法。
  • 所以在大多数情况下,我认为以标准方式使用 .load() 在我的实例中不会真正起作用。我必须使用您的建议作为解决方法,或者考虑使用 iframe 或第三方库,例如 graybox。感谢您对此进行调查。我会接受你的回答。
猜你喜欢
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多