将jQuery对象转换回xmldocument

时间:2009-11-04 14:37:37

标签: jquery xml xslt

问题在于:

我正在循环一组节点并根据它们的类型我想使用jQuery xslt插件。

var options = { 
    type: "POST",
    url: "api/dosomething/usefull",
    data: "orderid=12345",
    success: function(response) { 
        $(response).find("group").each(function() {
            if ($(this).attr(type) == "X") {
                $.xslt({xml: $(this), xslUrl: 'xsl/order/x_group.xsl', xslCache: false, callback: function(data){ 
                    //do something usefull with the transformed data
                }});                        
            } else {
                $.xslt({xml: $(this), xslUrl: 'xsl/order/other_group.xsl', xslCache: false, callback: function(data){ 
                    //do else with the transformed data
                }});                             
            }
        })
    }
};

问题是xslt插件需要一个javascript文档对象。如何将每个函数的结果转换回文档? $(this).text()将删除所有内部xml标记。 $(this).html()也不会工作,因为jQuery下的XML不支持。明确地将其用作参数(ofcourse)会触发错误。

替代方案:

  • 使用javascript内置文档解析函数将文档缩减到我们需要的节点,然后通过xslt解析器抛出边缘。考虑到jQuery的易用性,我宁愿不这样做。
  • 将整个文档放入xslt解析器并在xslt中解决它。如果解析器(或者我们所针对的浏览器的xslt解析器而不是pluign)支持xsl:import,那么这将是一个选项。我们需要重用这些xslt的
  • 我可以创建一个新文档,只要我知道如何获取内部字符串表示...

2 个答案:

答案 0 :(得分:0)

您可以使用$(this).get(0)将$(this)转换回原生DOM吗?

然后至少你会传入本机元素然后传递jQuery Collection。

答案 1 :(得分:0)

更多谷歌搜索解决了这个问题:

 var xmldoc = ((new XMLSerializer()).serializeToString(this));

我现在可以使用xmldoc作为xslt引擎的参数:)