在JQuery中获取动态添加的元素

时间:2011-09-21 21:12:09

标签: jquery

我正在尝试替换div中的文本,该文本会在单击链接时动态添加到对话框元素中。

    var feedBackDialog;
    if(!feedbackDialog){
        $(".feedback_link").click(function() {
            //set contents of the dialog 'feedback-dialog' 
            $.get("/users/feedback", null, function(result) {

                feedBackDialog = $("#feedback-dialog").html(result). //set html content during callback
                    attr('title', title).
                    dialog({ autoOpen: true, width: 560, modal: true 
            });
        });
        }
    else
    {
        feedbackDialog.dialog({ autoOpen: true, width: 560, modal: true });
    }
    //change the text in the newly created element.
    $('#feedback-label').text($(this).attr('feedback_desc'));

我正在提取的html中存在标识为feedback-label的元素。但是,最后一行的$('#feedback-label')不起作用,因为DOM尚未刷新。

我尝试过$("#feedback-dialog").find('#feedback-label'),但这似乎并不一致。有谁知道获得这个新创建的元素的好方法? 我知道我可以简单地用内容替换html <div id="feedback_label"></div>的字符串,但我看起来更好。

2 个答案:

答案 0 :(得分:3)

这不是因为dom没有被刷新,这是因为你正在制作一个尚未完成的AJAX请求。将代码行添加到成功回调中,您应该是金色的:

$.get("/users/feedback", null, function(result) {
  $("#feedback-dialog").html(result).attr('title', title).dialog({ autoOpen: true, width: 560, modal: true });
  $('#feedback-label').text($(this).attr('feedback_desc'));
});

答案 1 :(得分:2)

将最后一行移动到$.get的回调函数,因为只有在Ajax调用完成后才会准备好内容:

$.get("/users/feedback", null, function(result) {
       $("#feedback-dialog").html(result). //get HTML
                                attr('title', title).
                                dialog({ autoOpen: true, width: 560, modal: true });
       $('#feedback-label').text($(this).attr('feedback_desc')); //change the text in the newly created element.

});