2009年4月9日星期四

一段解决Firefox下Xslt中disable-output-escaping无效的JavaScript

在Firefox下浏览Xml+Xsl的页面时会出现由于disable-output-escaping属性无效而将html代码直接显示出来的问题,下面这段代码是利用jQuery写出来解决这个问题的,只需要对原有的Xsl代码做少量修改就可以了。


$(document).ready(function() {
    if (!$.browser.mozilla) return;
    $.each($("*[decodeable]"), function(i, el) {
        if (el.decoded) return;
        el.decoded = true;
        $(el).html($(el).text());
    });
});


要想使这段代码有效,你需要在你的<xsl:value-of/>外面加上一个带有decodeable属性的html元素就可以了。

<span decodeable="decodeable">
<xsl:value-of select="item/content" disable-output-escaping="yes"/>
</span>

下面这段是没有使用jQuery的代码

if (window.addEventListener) {
    window.addEventListener("load", function() {
        var els = [document];
        while (0 < els.length) {
            var el = els.pop();
            if (el.hasAttribute && el.hasAttribute("decodeable") && !el.decoded) {
                el.decoded = true;
                el.innerHTML = el.firstChild.data;
            }
            for (var i = 0; el.childNodes.length > i; i++) {
                els.push(el.childNodes[i]);
            }
        }
    }, false);
}

没有评论: