使用XSL生成的javascript隐藏/显示元素

时间:2012-06-03 22:34:08

标签: javascript xml xslt

我有一个包含一些数据的xml文件。我想展示一个"扩展"查看数据或概述。我设法用XSL显示扩展视图,我没有使用javascript来隐藏概述的一些内容。

这是我的xml文件:

<BS>
<project>
    <name>project1</name>
    <references id="1">
        <ref>ref1</ref>
        <ref>ref2</ref>
        <ref>ref3</ref>
    </references>

    <references id="2">
        <ref>ref4</ref>
        <ref>ref5</ref>
        <ref>ref6</ref>
    </references>

</project>
<project>
    <name>project2</name>
    <references id="1">
        <ref>ref7</ref>
        <ref>ref8</ref>
        <ref>ref9</ref>
    </references>
</project>
</BS>

和我的XSL:

<?xml version="1.0" encoding="ISO-8859-1"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">

<head>
<script language="javascript" type="text/javascript">

function HideClass(matchClass)
    {
    var elems = document.getElementsByTagName('*'),i;
    for (i in elems)
        {
        if((elems[i].className).indexOf(matchClass) > -1)
            {
            elems[i].style.display = 'none';
            }
        }
    }

function ShowClass(matchClass)
    {
    var elems = document.getElementsByTagName('*'),i;
    for (i in elems)
        {
        if((elems[i].className).indexOf(matchClass) > -1)
            {
            elems[i].style.display = 'block';
            }
        }
    }

function ShowOverview()
    {
    var elems = document.getElementsByTagName('*'),i;
    for (i in elems)
        {
        if((elems[i].className).indexOf('id1') > -1)
            {
            elems[i].style.display = 'block';
            }
        else
            {
            elems[i].style.display = 'none';
            }
        }
    }
</script>
 </head>        

 <body>

<xsl:for-each select="BS/project">
    <h3><xsl:attribute name="class"><xsl:value-of select="name"/>-id1</xsl:attribute>
        <xsl:value-of select="name"/>
    </h3>


    <xsl:for-each select="references">
        <div><xsl:attribute name="class"><xsl:value-of select="name"/>-id<xsl:value-of select="@id"/></xsl:attribute>

        Status: OK<br/>
        References id: <xsl:value-of select="@id"/>
        <table> 
            <xsl:for-each select="ref">
                <tr><td>
                <xsl:value-of select="text()"/>
                </td></tr> 
            </xsl:for-each> 
        </table>
        </div>
        <br/>
    </xsl:for-each>


    <!-- link Hide-->
    <xsl:element name="a">
    <xsl:attribute name="href">#</xsl:attribute>
    <xsl:attribute name="onclick">HideClass('<xsl:value-of select="name"/>');return false;</xsl:attribute>
    <i><xsl:text>Hide </xsl:text><xsl:value-of select="name"/></i>
    </xsl:element>
    <!-- end of link -->
    <br/>
    <!-- link Show-->
    <xsl:element name="a">
    <xsl:attribute name="href">#</xsl:attribute>
    <xsl:attribute name="onclick">ShowClass('<xsl:value-of select="name"/>');return false;</xsl:attribute>
    <i><xsl:text>Show </xsl:text><xsl:value-of select="name"/></i>
    </xsl:element>
    <!-- end of link -->
    <br/>

</xsl:for-each>
<hr/>
<a href="#" onclick="ShowOverview();return false;"> Show only overview</a>


</body>
</html>

但它不起作用。我想在&#34;加载页面&#34;上显示所有内容。 (这是有效的!)并在点击&#34;隐藏项目1&#34;时隐藏项目1(及其所有内容)。

此外,我想展示所有项目的概述&#34;用:

  • 标题(ex&lt; h3&gt; Project 1&lt; / h3&gt;)
  • 第一个引用(状态,ref id = 1和包含ref的表)

为每个项目点击&#34;仅显示概述&#34;。

但我的XSL只能显示所有内容,隐藏所有内容或隐藏标题!??!

您对我如何实现目标有什么想法吗?

谢谢。

0 个答案:

没有答案