2012-05-18 177 views
2

我要選擇動態使用AJAX的ID創建的元素,代碼:獲取元素的ID動態創建

$(function(){ 
    $('#loadFeed').bind('click',function(){ 
     $.getJSON('getData.php', function(json) { 
      var output="<ul id='feedsList'>"; 

      for(var i=json.posts.length-1;i>=json.posts.length-31;i--){ 
       output+="<li class='post'>"; 
       output+="<div class='text' id='"+json.posts[i].id+"'>"+json.posts[i].shortmsg+"</div>";   
       output+="</li>"; 
      } 
      output+="</ul>" 
      $(output).appendTo('.posts'); 
    }); 
    }); 
}); 

的HTML代碼:

<div class="posts"> 
    <!--dynamic content here--> 
</div> 

我試圖讓ID使用$(this).attr(「id」):

$(".post").on("click",".text",function(){ 
     var this_id =$(this).attr("id"); 
     alert(this_id); 
}); 

但它說未定義。我怎樣才能正確地得到這個ID?謝謝!

+0

你可以看到你的頁面上的「id」屬性,通過螢火蟲例如? –

+4

你確定'json.posts [i] .id'確實包含有用的東西嗎? –

+0

@Alexey是的。有包含數字的id屬性。我可以在Chrome中看到 –

回答

2

$(".post")應該是$('div.post'),因爲您是從具有相同類的ajax請求創建li。由於div.post存在於您的DOM中,因此您將其添加到列表中。

也就是說,

$("div.post").on("click","li.post div.text",function(){ 
     var this_id = this.id; 
     alert(this_id); 
}); 
+1

你可以使用DOM,並使用'var this_id = this.id;' (稍微)更快,並且避免了''this''在jQuery對象中不必要地包裝。 –

+0

@DavidThomas感謝Sir – thecodeparadox

+0

實際上,當我更改爲$(「。posts」)。on(「click」,「。text」,function (){ var this_id = $(this).attr(「id」); alert(this_id); });它的工作原理!無論如何thx! –

2

數字不是有效身份證件。我需要以字母開頭。

您將需要使用像這樣:

output+="<div class='text' id='post_"+json.posts[i].id+"'>"+json.posts[i].shortmsg+"</div>"; 

Here'se的有效ID的結構:What are valid values for the id attribute in HTML?