【问题标题】:Apply function to certain attribute values将函数应用于某些属性值
【发布时间】:2014-09-07 03:22:21
【问题描述】:

我有一个 javascript 函数,可以将所有相对 url 转换为绝对 url。

function rel2Abs(_relPath, _base);
//_relPath the relative path
//_base the base url

现在我想应用这个函数到文档字符串(jQuery post ajax响应)中的所有href和src值。 p>

最简单的解决方案是什么? 有没有办法使用正则表达式解决这个问题?

编辑:jQuery 可用

【问题讨论】:

  • 你的 ajax 响应是什么样的?
  • 它只是一个字符串化的普通html文档“...”

标签: javascript jquery ajax regex url


【解决方案1】:

假设您的 AJAX 响应是 text/html,您可以将其包装在 jQuery 对象中并对其执行 DOM 操作。像这样的:

// in success handler -- assuming 'data' = returned value
var $data = $(data);
$('a', $data).each(function() {
    $(this).attr('href', function(val) {
        return rel2abs(val, baseUrl); // assuming baseUrl is a global
    })
});
$data.appendTo(someElement);

img 元素将遵循相同的模式,只是更改 $('img', $dom)$(this).attr('src', fn)

【讨论】:

  • $('link', $data) 会返回一个空结果,即使我的文档中有 元素。有什么想法吗?
  • 使用filter而不是find($('link', $data)) 因为链接标签在被剥离的头标签中,因此它们将在jQuery中处于顶层对象。
【解决方案2】:

您可以使用 jQuery 使用 $.parseHTML 解析您的 html 字符串,并将生成的 dom 节点数组包装在 jQuery 对象中。理论上,您可以将 html 直接传递给$,但如果您的 HTML 以纯文本开头,则可能会遇到问题。

这是一个你可以使用的实用函数:

!function($) {
    $.extend({
        fromHtml: function (html) {
            return $($.parseHTML(html));
        }
    });
}(jQuery);

然后您可以简单地执行以下操作:

var urlConverter = function (i, v) {
        return rel2abs(v, 'yourBaseUrl');
    },
    $dom = $.fromHtml(yourHtml)
        .filter('[href]').attr('href', urlConverter).end()
        .filter('[src]').attr('src', urlConverter).end();

【讨论】:

  • 工作正常我只需要按照下面提到的 Rory (y) 替换过滤器查找即可
  • @RicoOcepek 修正了答案。
  • 抱歉,@Musa 没有提到罗里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 2014-06-10
  • 2022-01-15
  • 1970-01-01
  • 2015-04-23
  • 2021-09-11
相关资源
最近更新 更多