更新1:
我是否遇到此问题,因为我在.BC1
可以使用之前删除了get_firm_summary();
?
原始问题:
我已经重新开始这个问题,因为它结构不合理并且造成了很多混乱。
在开始之前,我想指出我正在使用jQuery 1.4
我有一个函数,我在某些HTML中动态创建span
标记,span
标记看起来像这样:
<span class='BC1'>some text here</span>
插入.BC1
之前的HTML如下所示:
<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();
,因为插入的.BC1
消失了。我遇到了get_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
没有任何反应。
任何人都知道为什么会这样吗?
答案 0 :(得分:1)
问题是因为在你调用get_firm_summary( $(this) );
之前,你在被点击元素的父div上调用了empty()
。这会丢失对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();
}
的小提琴
答案 1 :(得分:0)
试试这个以获得更好的解决方案
$('.BC1').live('click', function() {
alert("clicked");
get_firm_summary( $(this) );
$(this).closest('.portlet_10').find('.portlet_sub_header_10').empty();
});