XSLT打破了Firefox中的jQuery / Prototype Script

时间:2010-08-22 15:54:21

标签: jquery firefox prototypejs xslt

我正在做一个学校项目。这是一个带XML / XSLT的互联网页面。 对于设计,我们考虑了背景中的图像褪色效果。

我可以看到它,它在IE7上完美运行。但是在FF 3.6中检查它会在firebug中引发一些可疑错误并且不起作用。

例如:

alert($('menu_bg').innerHTML);  

与文档就绪/观察一起使用时有效。但这些都不起作用:

$('#menu_dots').append("content"); // jQuery
$('menu_dots').insert("content");  // prototype

关键是,我不明白,为什么一切都在没有XSLT的情况下工作。但是当我对XSLT做同样的事情时,它会在FF中中断。

http://nak.erline.eu/index.xml

同域/js/_script.js

我认为这个问题是基于jQuery的,这就是我开始将其翻译成原型的原因。在我的一半路上,我意识到问题仍然存在。这就是为什么代码仍然使用jQuery(注释)和Prototype。

有你的想法吗?

2 个答案:

答案 0 :(得分:2)

在XSLT文件更改的顶部:

<xsl:output method="xml" indent="yes" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />

<xsl:output method="html" indent="yes" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />

请注意,输出方法类型应为 html ,而不是 xml 。这解决了我的测试中的问题。

我在这里找到了答案的提示:Why does my simple strict XHTML file give errors when I include jquery?

同样在我的测试中,我删除了以下脚本引用

<script src="src/scriptaculous.js" type="text/javascript"/>
<script type="text/javascript" src="js/_script.js"/>

并添加了对jQuery的引用

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>

并使用您的jQuery代码段进行测试。

<script>
    $(document).ready(function(){
        $('#menu_dots').append("content");
    });
</script>

答案 1 :(得分:1)

如果你必须使用XSLT,HTML DOM,XML和跨浏览器功能,我强烈推荐Sarissa。它将使与Microsoft的硬兼容不兼容的ActiveX DOM和所有其他基于W3C的DOM更加容易。

您(可能,不一定)面临的问题是生成的DOM对象不属于相同的源XML文档,这是默认的DOM行为。结果,jQuery或Prototype无法找到新元素。一种解决方法是将它们作为文本插入并重新进行重新分析,但这样做成本很高。还有其他解决方法,但最简单的可能是看看Sarissa并学会使用它。这并不难,使您的代码更具可读性。你会发现Sarissa会照顾这些和其他微妙之处,所以你可以担心更重要的事情。