У меня есть объект XSL. Я хочу извлечь выбранную группу узлов. Другой человек или команда написал XSL-документ и строку кода, которая выбирает эти узлы, но она работает только в IE, и я пытаюсь сделать ее совместимой с кросс-браузером.jQuery Selector escaping colon ":" работает в 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");
спасибо.
Update
В соответствии с просьбой, я добавил скрипку.
Update2
Рабочая JSFiddle процедура со всем кредитом комментатор Нит.
В случае связь прерывается, вот соответствующая часть:
// 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'? – jfriend00
Что на самом деле происходит при запуске кода в других браузерах? Вы получаете конкретную ошибку, сообщаемую в консоли браузера, или ...? – nnnnnn
'csvXsl' - это объект XSL, созданный из файла XSL выше. – user717236