不能在XSLT样式表(Firefox)中使用document.write

时间:2011-05-24 15:25:38

标签: javascript firefox xslt document.write

我创建了一个包含嵌入式JavaScript的XSL样式表。它调用函数,然后调用document.write()将这些函数的结果打印到页面。

<xsl:foreach...>
<div class="directionBlock">
<script type="text/javascript">writeDirection('<xsl:value-of select="Direction"/>');</script>
</div>
</xsl:foreach...>

不幸的是,在firefox中,不支持document.write()。怎么办?

2 个答案:

答案 0 :(得分:1)

为什么需要XSLT和Javascript来输出HTML?如果您的目标是输出包含div元素的script中的内容,那么请考虑单独使用XSLT。如果您确实需要使用Javascript创建内容,请考虑使用createElementappendChild等方法代替document.write。 这是一般性答案可以提供帮助,如果您需要特定帮助,那么我们需要查看代码的详细信息,例如writeDirection函数和传递给它的参数。

为了给你一些示例代码的概述,如果你的writeDirection函数需要向div添加内容,那么在div上添加一个id,例如<div id="db1" class="directionBlock">...</div>,然后将其传递给writeDirection函数,例如<script type="text/javascript">writeDirection('<xsl:value-of select="Direction"/>', document.getElementById('db1'));</script>,然后在该函数中完成

function writeDirection(dir, elementToWriteTo) {
  // instead of document.write(stuff) use
  var span = document.createElement('span');
  span.innerHTML = stuff;
  elementToWriteTo.appendChild(span);
}

答案 1 :(得分:0)

我实现解决方案的方法是调用函数并传递行号:

<xsl:foreach...>
  ...
  <div class="directionBlock">
    <script>myJsFunction('<xsl:value-of select="Direction"/>', <xsl:value-of select="position()"/>);</script>
  </div>
  ...
</xsl:foreach...>

这反过来使用JQuery来访问有问题的元素,使用nth-child(position)来获取行,找到一个选择器并使用.html()将代码插入到该元素中。

感谢您的帮助!