2

我有一个函数,其目的是更新通过 jQuery.get() 加载到页面中的 HTML 中的链接。后端应用程序有数以千计的链接不能轻易更新以包含完整路径,因此当转换为单页应用程序时,许多链接是相对于 / 的,当它们需要包含完整路径时。

我在这里阅读了几个关于从相对路径转换为绝对路径并找到绝对路径的问题,但它们不太适合我正在尝试做的事情,而且我对 Javascript 和 jQuery 的理解仍然很薄弱,以至于我没有不知道如何在这个症结之外寻找答案。

这是我的功能:

// handle modifying links, and attaching events
// href - The URL of the age that was loaded that triggered the handler callback
// target = left or right (must be ID, as # will be appended
var handler = function (data, href, target) {
  // Insert data into div
  $( '#' + target ).html(data);

  // Convert relative URLs in #right to include directory
  var base_path = URI(href).directory();

  $('#right a:uri(is: relative)').attr('href', base_path+'/'+$(this).href);
};

这成功地找到并添加了 base_path (它从传递给函数的 href 变量中获取它),但我不知道如何在其中获取原始文件名和查询字符串。我变得不确定......所以我显然不明白'$(this)'或.href。我尝试了许多其他选项来获取这些数据,但它们要么导致错误要么导致未定义的值......再次表明我不知道我在做什么。谷歌搜索“这个”很难。

我也尝试使用 $(this).attr('href'),但结果是一样的......未定义。

简而言之:当我更新 URI attr 时,如何找出 attr 更新中最初选择的 href 并将其放入新的 URI 中?

注意我正在使用 jQuery 和这个 jQuery URI 库: http: //medialize.github.io/URI.js/jquery-uri-plugin.html

4

1 回答 1

1

好的,我通过更多的谷歌搜索发现了这一点。适用于我需要的功能是:

var handler = function (data, href, target) {
  // Insert data into div
  $( '#' + target ).html(data);

  console.log("href = ", href);
  // Convert relative URLs in #right to include directory
  var base_path = URI(href).directory();
  //var base_path = uri.directory() + '/';
  console.log(base_path);
  $('#right a:uri(is: relative)').each(function() {
    var cur_href = $(this).attr("href");
    $(this).attr("href", base_path+"/"+cur_href);
  });
};

更改是使用 .each 来允许匿名函数在每个相关链接上完成工作。

于 2013-08-29T17:57:05.550 回答