jQuery.attr()没有更新HTML字符串?

时间:2016-01-14 22:19:28

标签: javascript jquery

$.ajax({
    url: "getHTML.php",
    data: {url: "http://www.google.com"},
    success: function(e){
        var html = e;
        $('img', html).each(function(){
            $(this).attr("src", "http://google.com/logo.jpg");
        });
        $('a', html).each(function(){
            $(this).attr("href", "http://google.com/");
        });
        $('body').html(html);
    }
});
  1. 运行AJAX
  2. 运行PHP,它在GET请求中回显URL的HTML
  3. 将回复另存为HTML字符串
  4. 使用jQuery解析HTML字符串并替换所有链接和图像
  5. 在页面中显示
  6. 但基本上,没有设置更改。

    $(this).attr("src", "http://google.com/logo.jpg");
    

    返回带有google徽标作为源属性的片段,但

    $(this).replaceWith($(this).attr("src", "http://google.com/logo.jpg"));
    

    没有工作。

1 个答案:

答案 0 :(得分:7)

此:

$('img', html).each(function(){
  $(this).attr("src", "http://google.com/logo.jpg");
});

大概是指:

  1. html
  2. 创建文档片段和jQuery对象
  3. 修改该对象中的所有img标记
  4. 就是这样。您不会存储该对象,因此您无法使用其更新的内容 - 也不会(或应该)更改html

    尝试改为:

    var d = $(html);
    
    $('img', d).each(function() {
      $(this).attr("src", "http://google.com/logo.jpg");
    });
    $('a', d).each(function() {
      $(this).attr("href", "http://google.com/");
    });
    $('body').html(d.html());
    

    虽然如果所有属性都相同,您可以跳过each()次调用:

    var d = $(html);
    
    $('img', d).attr("src",  "http://google.com/logo.jpg");
    $('a',   d).attr("href", "http://google.com/");
    
    $('body').html(d.html());