Javascript 在AJAX请求返回的HTML中重新建立相对URL的基础

Javascript 在AJAX请求返回的HTML中重新建立相对URL的基础,javascript,jquery,html,ajax,prototypejs,Javascript,Jquery,Html,Ajax,Prototypejs,我有一个网页,它执行各种AJAX请求(随着时间的推移)来加载页面上显示的HTML片段。返回的HTML有时包含相对URL(在[href]、img[src]等中),我无法在服务器端轻松更改。当HTML被插入到我的文档中时,这些URL会被解释为相对于我的网页位置,这会导致错误的目的地 我曾考虑过使用HTML元素来重新设置相对URL的基础,但这会立即影响整个网页,而我需要为每个HTML片段使用不同的基本URL 目前最简单的解决方案如下:(i)在DOM元素中加载HTML片段;(ii)访问所有节点以绝对化相

我有一个网页,它执行各种AJAX请求(随着时间的推移)来加载页面上显示的HTML片段。返回的HTML有时包含相对URL(在[href]、img[src]等中),我无法在服务器端轻松更改。当HTML被插入到我的文档中时,这些URL会被解释为相对于我的网页位置,这会导致错误的目的地

我曾考虑过使用HTML
元素来重新设置相对URL的基础,但这会立即影响整个网页,而我需要为每个HTML片段使用不同的基本URL

目前最简单的解决方案如下:(i)在DOM元素中加载HTML片段;(ii)访问所有节点以绝对化相对URL;(iii)将生成的元素插入到我的文档中。然而:

  • 在步骤(i)中,我认为浏览器已经开始在错误的位置加载图像了?你能阻止吗
  • 对于第(ii)步,是否有一种或多或少全面的方法来查找所有URL属性?a[href]和img[src]是最重要的,但您可能还有object[src]、script[src]和其他我忘记的东西

  • 或者有没有更好的方法,比如使用Javascript HTML解析器?我需要能够处理非常通用的HTML,但支持的浏览器集是有限的(最新版本的Chrome、Mobile Safari)。我使用的是PrototypeJS,因此这个框架的代码示例非常受欢迎(但jQuery也很好)。

    让我们创建一个图像注册表,所有图像都有唯一的名称,如果发现重复,请重命名或散列它们,然后将图像路径存储在DB或顺序文件中。当图像名称作为url中的参数给出时,Servlet将传递图像。这个想法可行吗?我很确定,对于这样的异构内容,您需要做的是仔细检查返回的html,查找所有的
    src
    href
    属性,检查它们是否以协议开头,以及不以协议开头的属性,前置一个与HTML源相对应的基本URL。有趣的问题。