2014-12-06 88 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", "")); 
}); 

感謝