2014-12-06 170 views
3

我需要修改通过ajax加载的内容,但似乎无法访问它。我无法访问正在执行初始加载的js文件,因此我需要编写一个单独的函数来更改内容。无法访问使用jQuery通过ajax加载的元素

内容需要自动修改,无需用户点击或与页面上的任何内容进行交互。

在下面的例子中,'news'div是硬编码的,'article'div是通过ajax加载的。

HTML

<div id="news"> 
<div class="article"><img src="headline1_small.jpg"> 
<div class="article"><img src="headline2_small.jpg"> 
<div class="article"><img src="headline3_small.jpg"> 
</div> 

jQuery的

$(document).ready(function() { 
    console.log($("#news").html()); 
}); 

控制台

<div id="news"> 
</div> 

我怎样才能访问的文章?我想从img src中删除'_small'。

谢谢!

+0

我觉得你的运气了,如果你不想依赖用户的交互,但修改动态添加的DOM对象。您可以收听DOM突变事件,tho:https://developer.mozilla.org/en/docs/Web/API/MutationObserver – Terry 2014-12-06 21:49:22

+0

下面的ajaxStop接受的答案似乎运作良好。 – DLL 2014-12-07 02:17:08

回答

2

这应该工作:

$(document).ajaxStop(function() { 
    $("#news").find('img').attr("src", function(_, src){ 
     return src.replace('_small', ''); 
    }); 
}); 
+0

谢谢!完美的作品! – DLL 2014-12-07 02:11:02

0

我怎样才能访问的文章?我想从img src中删除'_small'。

例如像这样:

$('#news .article img').attr('src', function() { 
    return this.src.replace('_small', ''); 
}); 

您可以在AJAX顺利完成

$(document).ajaxSuccess(function() { 
    // above code 
}); 
+0

不知道为什么,但ajaxStop比我更需要ajaxSuccess。 – DLL 2014-12-07 02:14:16

0

你说文章div s的通过AJAX加载执行该代码,似乎这个脚本在加载之前运行。尝试在#news之后放置此脚本,以便所有内容在执行时都已加载。

<div id="news"> 
<div class="article"><img src="headline1_small.jpg"> 
<div class="article"><img src="headline2_small.jpg"> 
<div class="article"><img src="headline3_small.jpg"> 
</div> 

<script> 
$(document).ready(function() { 
    console.log($("#news").html()); 
}); 
</script> 
+0

我试着将代码移动到文件末尾,但没有任何效果。 ajaxStop功能效果最佳。 – DLL 2014-12-07 02:15:28

0

要从img标签的src中删除“_small”,还有其他方法。你不需要访问#news div的html() - > innerHTML。

所有你能做的就是抓住所有“.article”div,然后改变img标签。

$(".article img").each(function() { 
    $(this).attr('src', $(this).attr('src').replace("_small", "")); 
}); 

感谢