将函数应用于某些属性值

时间:2014-07-16 14:30:35

标签: javascript jquery ajax regex url

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

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

现在我想函数应用于文档字符串(jQuery post ajax response)中的所有href和src值。

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

编辑:jQuery可用

2 个答案:

答案 0 :(得分:3)

您可以使用jQuery使用$.parseHTML解析html字符串,并将生成的dom nodes数组包装在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();

答案 1 :(得分: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)