2010-09-09 30 views
0

这与earlier question有关。我尝试将AJAX响应中返回的HTML DOM追加到现有的DIV中。我看到所有的文字,但似乎所有标记,如大胆,斜体等都丢失了。jQuery DOM追加失败标记

我的AJAX(XML)的数据,像这样:

<event source="foo"> 
    <contents> 
     <h1>This is an event</h1> 
     This is the body of the event 
    </contents> 
</event> 

我的jQuery代码做到这一点:

$("#eventDiv").append(jData.find("contents").contents().clone()); 

试图做的.html()的克隆内容抛出异常:TypeError:无法调用未定义的方法'替换'

我有点惊讶,用jQuery做这件事实在太难了。我做的事情离轨道太远了吗?

+0

你可以张贴一些HTML和您的jQuery的AJAX调用? – hunter 2010-09-09 18:46:57

+0

需要查看更多的AJAX代码。你运行ajaxSetup()?你回到哪种类型? jData中有什么? – 2010-09-09 18:49:07

+0

我不得不求助于XMLSerializer。我遍历每个孩子并使用序列化程序在追加之前将其转换为文本。获得的经验:目前,如果从XMLHTTP响应中获取它们,jQuery.append()将不适用于DOM对象。 – Raj 2010-09-09 19:12:09

回答

0

似乎麻烦的是jQuery找到与允许标记命名不同的标记/节点。也就是说,您的XML格式不正确,因为它既有内容中的节点也有文本。

这是不是很好,但它的工作:

$("#eventDiv").append($(":first-child", data).parent().html()); 

<content>标签将被列入,而是由浏览器忽略。

0

看起来像jQuery不提供一个简单的方法,我想要做什么。总括来说,我的服务器在Ajax响应返回以下数据:

<event source="foo"> 
    <contents> 
     <h1>This is an event</h1> 
     This is the body of the event 
    </contents> 
</event> 

我想在一个div来显示的东西里面内容标签。 我的JS代码处理这个在阿贾克斯成功处理程序如下:

var jData = $(data); 

我有一个ID eventDiv一个div我需要显示事件的内容。我希望可以这样做:

$("#eventDiv").append(jData.find("contents").contents().clone()); 

但是这导致所有标记丢失,导致只是文本。

以下基础上的XMLSerializer对我的作品(不适用于IE浏览器):

var contents = jData.find("contents"); 

if(contents != null) 
{ 
    var serializer = new XMLSerializer(); 
    $(contents).contents().each(function(index, value) 
    { 
     var cloned = $(value).clone(); 
     $("#eventDiv").append(serializer.serializeToString(cloned[ 0 ])); 
    }); 
}