1

更新 1:

我遇到这个问题是因为我在使用它.BC1之前就移除了吗?get_firm_summary();

原始问题:

我重新开始了这个问题,因为它的结构不好并且引起了很多混乱。

在开始之前,我想指出我使用的是 jQuery 1.4

我有一个函数,我可以span在一些 HTML 中动态创建一个标签,该span标签看起来像这样:

<span class='BC1'>some text here</span>

插入之前的 HTML.BC1如下所示:

<div class="portlet_10">
    <div class="portlet_header_10"></div>
    <div class="portlet_sub_header_10">this is where the span gets inserted</div>
    <div class="portlet_content_10">this is the bit which should get cleared and appended with new data</div>
    <div class="portlet_footer_10"></div>
<div>

.BC1插入后看起来像这样:

<div class="portlet_10">
    <div class="portlet_header_10"></div>
    <div class="portlet_sub_header_10"><span class="BC1">some text here</span></div>
    <div class="portlet_content_10">this is the bit which should get cleared and appended with new data</div>
    <div class="portlet_footer_10"></div>
<div>

然后我有click这个.BC1标签的事件:

$('.BC1').live('click', function() {
    alert("clicked");
    $(this).closest('.portlet_10').find('.portlet_sub_header_10').empty();  
    get_firm_summary( $(this) );
});

随着插入的消失,警报并找到最接近的portlet_sub_header_10并将其设置为有效。我遇到了问题empty();.BC1get_firm_summary( $(this) );

该函数看起来像这样:

function get_firm_summary( that ) {
    $.ajax({
        url: 'get_firm_summary.aspx?rand=' + Math.random(),
        type: 'GET',
        error: function(xhr, status, error) {
            console.log(status);
            console.log(xhr.responseText);
        },
        success: function(results) { 
            console.log( that.attr("class") );
            that.closest('.portlet_10').find('.portlet_content_10').empty().append( results );
        }
    });
}

在这里,console.log 工作正常,但portlet_content_10.

有谁知道为什么会这样?

4

2 回答 2

1

问题是因为在您调用之前,get_firm_summary( $(this) );您正在调用empty()单击元素的父 div。这会丢失对 DOM 中元素的引用,从而使任何遍历功能变得不可能。

试试这个:

$('.BC1').live('click', function() {
    get_firm_summary( $(this) );
});

// ajax:
success: function(results) {
    // add new text
    that.closest('.portlet_10').find('.portlet_content_10').empty().append("FOO BAR");

    // remove clicked element
    that.closest('.portlet_10').find('.portlet_sub_header_10').empty();  
}

请参阅此小提琴以获取工作示例

于 2012-05-29T09:47:19.617 回答
0

试试这个以获得更好的解决方案

$('.BC1').live('click', function() {
    alert("clicked");
    get_firm_summary( $(this) );
    $(this).closest('.portlet_10').find('.portlet_sub_header_10').empty();  

});
于 2012-05-29T10:02:08.510 回答