2010-08-06 64 views
1

我们使用jQuery来生成XML片段,然后使用html()函数将其转换为字符串。但正如我们刚刚发现的那样,如果有人不知道,那么在IE中实现的JavaScript函数就会被破坏,破坏,破坏。基本上,它会利用一些标签,在“帮助”(在我们的例子中)给其他人增加属性,而且通常不会做正确的事情。让jQuery与另一个库一起工作(XML解析)

我想用这样的事情来生成XML字符串,而不是:

http://www.stainlessvision.com/jquery-html-vs-innerxhtml

然而,该库将无法很好地与jQuery玩开箱,例如:

var $dummyRoot = $('<dummyroot/>'); // since html() doesn't generate the outer element 
var $foo = $('<foo></foo>'); 
var $font = $('<font ></font >'); 
$foo.append($font); 
$dummyRoot.append($foo); 
var $s = innerXHTML($dummyRoot); // <-- Doesn't work 

我认为它想要更多的W3C DOM-ish对象。

如何让jQuery与此innerXHTML()函数对话;或者,也可以使用另一个函数(也许内置于jQuery或jQuery插件中))?

编辑:跟进DDaviesBrackett的问题。我的XML中也有一个“body”元素;看看它如何拾取CSS样式(而不仅仅是一个元素)。

是否存在一个不成文的规则,在元素名称为body,font,head等的DOM内部不生成XML?

var $dummyRoot = $('<dummyroot/>'); 
var $foo = $('<foo></foo>'); 
var $body = $('<body></body>'); 
var $font = $('<font></font>'); 
$body.append($font); 
$foo.append($body); 
$dummyRoot.append($foo); 

var $s = innerXHTML($dummyRoot[0]); 

// $s equals "<foo><body bottommargin="15" leftmargin="10" rightmargin="10" topmargin="15"><font size="+0"></font></body></foo>" 

回答

1

jQuery对象包装其内容,但通过数组索引器公开它们。你用什么来得到

var $s = innerXHTML($dummyRoot[0]); 

而不是你的榜样?

+0

见更新我的问题函数名。 – 2010-08-06 23:55:56

0

是否有一个不成文的规则,不在DOM中生成其元素具有像body,font,head等名称的XML?

jQuery的依赖于innerHTML属性来解析给定的一段文字,并从该构建DOM。它从来不是要分析或生成XML,因为根据浏览器的看法,碰撞名称可能会给出完全不可预知的结果。

我已经给了一个similar answer在使用递归的方法更少的步骤生成正确的XML。创建以下XML:

<foo> 
    <body> 
     <font></font> 
    </body> 
</foo> 

你可以这样写:

Σ('foo', 
    Σ('body', 
     Σ('font', '') 
    ) 
); 

Σ只是看起来凉爽,但你可以改变任何你想要:)

+0

我仔细看了一下你的酷西格玛运算符,但我想知道如果我必须循环访问现有的数据结构,我将如何使用它来生成XML。到目前为止,您的所有示例(这里和其他问题)都是静态地执行XML构建。 – 2010-08-07 00:36:49

+0

这里只有三个基本元素 - 'createElement','createTextNode'和'appendChild'。前两个需要创建节点的文档对象,最后一个需要添加新节点的父节点。我将尝试更新用于动态生成XML的示例。 – Anurag 2010-08-07 01:32:01