【发布时间】:2014-02-06 02:55:12
【问题描述】:
我有一个 XSL 对象。我想提取一组选定的节点。另一个人或团队编写了 XSL 文档和选择这些节点的代码行,但它仅适用于 IE,我正在尝试使其跨浏览器兼容。
XSL 文件
<!-- snippet of XSL file -->
<xsl:variable name="title">aaa</xsl:variable>
<xsl:variable name="col1">CSV00001</xsl:variable>
<xsl:variable name="col2">CSV00002</xsl:variable>
<xsl:variable name="col3">CSV00003</xsl:variable>
<xsl:variable name="col4">CSV00004</xsl:variable>
<xsl:variable name="col5">CSV00005</xsl:variable>
<xsl:variable name="col6">CSV00006</xsl:variable>
<xsl:variable name="col7">CSV00007</xsl:variable>
<xsl:variable name="col8">CSV00008</xsl:variable>
<xsl:variable name="col9">CSV00009</xsl:variable>
JS 文件
// Extract title and column nodes
var varNodes = $(csvXsl).find("xsl\\:variable");
我尝试参考这篇文章以获取想法,Handling a colon in an element ID in a CSS selector,但那是针对 CSS 的。但我确实尝试用\\3A、\\3a、3a、3A 替换\:,但这些都不起作用。
有什么建议吗?
根据要求,这里提供了有关如何创建 XSL 对象的更多信息。
function loadXml(xmlFilePath) {
var retObj = null ;
var timeUniq = (new Date()).getTime();
// check protocol
var protocol = document.location.protocol;
if(protocol.toLowerCase().indexOf("http")>=0){
$.ajax({
url: xmlFilePath + "?t=" + timeUniq,
type: 'get',
dataType: 'xml',
async: false,
timeout: 1000
})
.done(
function(xml, status){
if( status != 'success' ){
return;
}
retObj = xml;
})
.fail(
function(xhr, textStatus){
return;
});
}
return retObj;
}
csvXsl = loadXml("./xsl/OrderListCSV.xsl");
谢谢。
更新
根据要求,我添加了一个小提琴。
更新2
工作 JSFiddle 例程,所有功劳归功于评论员 Niet。
如果链接被破坏,这里是相关部分:
// Workaround for JQuery bug, primarily using Vanilla JS.
function serializeXmlNode(xmlNode) {
if (typeof window.XMLSerializer != "undefined") {
return (new window.XMLSerializer()).serializeToString(xmlNode);
} else if (typeof xmlNode.xml != "undefined") {
return xmlNode.xml;
}
return "";
}
var tmpStr = serializeXmlNode(csvXsl); // Converts XML/XSL object to String
var tmp = document.createElement('div');
tmp.innerHTML = csvXsl; // Does not work
tmp.innerHTML = tmpStr; // This one works, had to serialize object first
var varNodes = tmp.getElementsByTagName('xsl\:variable'); // Works
var varNodes2 = tmp.getElementsByTagName('xsl:variable'); // Also works
【问题讨论】:
-
csvXsl变量中有什么内容? -
在其他浏览器中运行代码时实际发生了什么?您是否在浏览器控制台中报告了特定错误,或者...?
-
csvXsl是 XSL 对象,由上面的 XSL 文件创建。 -
很遗憾,我在浏览器控制台中没有收到错误报告,没有。 jQuery 对象的长度只是 0,但它并不是设置为 null 或 undefined。
标签: javascript jquery internet-explorer google-chrome jquery-selectors