2010-11-09 70 views
0

我有一个问题。 只是尝试加载一些div在一个div ...一切工作正常,除了ie的每个浏览器。jquery得到。我不能替换动态加载的HTML中的div的内容

$('a[rel*=ajax]').click(function(e) 
    { 
     ajaxLink = $(this).attr('href')+"?ajax=true"; 
     theDiv = $(this).parents(".post"); 
     $.get(ajaxLink,function(data, textStatus){ $(theDiv).replaceWith(data); }); 
    }); 

,如果我尝试在不用彷徨回调,我可以阅读一些HTML提醒(数据),但是当我尝试在theDiv“注入”,我得到了一个空白页面。

感谢很多提前:)

+0

哪个版本的IE浏览器? – 2010-11-09 17:18:26

+0

不幸的是每一个版本 – Luke 2010-11-09 17:37:14

回答

0

不幸的是至极没有关闭.. 和IE似乎不是很灵活,有这样那样的问题。

0

...但是当我尝试在theDiv“注入”,我得到了一个空白页面。

您需要取消链接的默认操作;否则,链接将被遵循。将return false添加到您的点击处理程序的末尾,或将e.preventDefault();添加到它。例如,这样的:

$('a[rel*=ajax]').click(function(e) 
{ 
    ajaxLink = $(this).attr('href')+"?ajax=true"; 
    theDiv = $(this).parents(".post"); 
    $.get(ajaxLink,function(data, textStatus){ $(theDiv).replaceWith(data); }); 
    return false; // This both prevents the default and stops bubbling 
}); 

$('a[rel*=ajax]').click(function(e) 
{ 
    ajaxLink = $(this).attr('href')+"?ajax=true"; 
    theDiv = $(this).parents(".post"); 
    $.get(ajaxLink,function(data, textStatus){ $(theDiv).replaceWith(data); }); 
    e.preventDefault(); // This just prevents the default, doesn't stop bubbling 
}); 

另外:

的引用代码使用从父范围ajaxLinktheDiv变量(如果他们没有宣布任何地方,他们'implicit global variables)。在显示的代码运行之后但在ajax调用完成之前,是否可以改变theDiv的值?这意味着当ajax调用完成时,它将使用新值theDiv而不是旧值。

在任何情况下,似乎没有任何理由的代码应该是使用从父范围变量,我建议让他们本地的功能:

$('a[rel*=ajax]').click(function(e) 
{ 
    var ajaxLink = $(this).attr('href')+"?ajax=true"; 
// ^-- This is the new bit, the `var` 
    var theDiv = $(this).parents(".post"); 
// ^-- And this one 
    $.get(ajaxLink,function(data, textStatus){ $(theDiv).replaceWith(data); }); 
}); 

作为一个单独的问题,你确定要replaceWith(这将取代具有类post父),而不是html(这只会替换其内容)?

但也没有理由再次呼吁theDiv$; parents已经返回一个jQuery对象。所以:

$('a[rel*=ajax]').click(function(e) 
{ 
    var ajaxLink = $(this).attr('href')+"?ajax=true"; 
    var theDiv = $(this).parents(".post"); 
    $.get(ajaxLink,function(data, textStatus){ theDiv.replaceWith(data); }); 
//            ^-- No need for $ here 
}); 

最后:你可以看一下load功能,它从服务器加载HTML并更新结果的元素的内容。

+0

感谢真的详细说明:)我改变了我的代码这样:\t \t $( 'A [相对* = AJAX]')点击(函数(E) \t \t { \t \t \t VAR ajaxLink = $(本).attr( 'href' 属性)+ “?阿贾克斯=真”; \t \t \t VAR theDiv = $(本)。家长( “后”); \t \t \t $获得( ajaxLink函数(data,textStatus){theDiv.html(data);}); \t \t \t返回false; \t \t}); 但不幸的是有同样的问题。如果我写了DIV.html(“你好”);一切正常!也许回调中的“数据”被破坏? – Luke 2010-11-09 17:35:36

+0

@Luca:*“也许”数据“已损坏”*好吧,你说如果你提醒它看起来很好。我会用一个调试器,仔细检查各个点的事情。 – 2010-11-09 17:37:36

+0

J.Crowder,只是重新检查回调中的数据,我可以确认是纯html。我也尝试了加载功能,但我再次得到一个空白的div – Luke 2010-11-09 17:43:44

0

可以尝试住,而不是点击它应该工作的罚款。

有时在IE的DOM可能还没有准备好

$(a[rel*=ajax).live('click', function() { 

      }); 
相关问题