在XSLT中的jQuery中提供动态ID

时间:2011-11-28 08:34:18

标签: jquery html xml xslt

我想在我的XSLT中添加我的jQuery代码,这不是问题,问题是....我需要在我的jQuery代码中提供动态ID。

我正在使用XSLT的变量提供它,但不知道究竟应该是什么样的正确方法?? !!

这是我的Sample XSLT:

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">

<xsl:output method="html" indent="yes" />
<xsl:param name="groups" select="//rs:data//z:row[not(@GroupName=preceding-sibling::z:row/@GroupName)]"  />
<xsl:key name="k1" match="Users/User" use="@Name"/>

<xsl:template match="/">

<xsl:for-each select="$groups">

<script type="text/javascript">
function togglesetup_0() {
    jQuery('#@Name .contacts_basic').click(function () {
        jQuery(this).parent().children('div.contacts_basic2 > div.contacts_basic1').slideToggle();
        jQuery(this).toggleClass('contacts_basic_selected');
    });
}
_spBodyOnLoadFunctionNames.push("gmis_contacswp_togglesetup_0");
</script>

  <xsl:sort select="@GroupName" order="descending" />
  <xsl:sort select="@User" order="ascending" />
  <xsl:variable name="group" select="@GroupName" />

.....
  ......

阅读此行......

jQuery('#@Name .contacts_basic').click(function () {

我需要提供一个动态ID,我写了@Name(一个XSLT变量)。

请建议!!

1 个答案:

答案 0 :(得分:1)

试试这个:

<script type="text/javascript">
function togglesetup_0() {
    jQuery('#<xsl:value-of select="@Name"/>.contacts_basic').click(function () {
        jQuery(this).parent().children('div.contacts_basic2 > div.contacts_basic1').slideToggle();
        jQuery(this).toggleClass('contacts_basic_selected');
    });
}
_spBodyOnLoadFunctionNames.push("gmis_contacswp_togglesetup_0");
</script>

关于你的代码的另一点:sort元素必须在for-each之后。

要使用XSLT生成id,您需要generate-id()函数。我没有任何参数,它返回上下文节点的唯一ID。在我们的示例中,如果您使用generate-id()替换上面代码中的select属性中的@Name

如果您在XSLT中的其他位置使用它,如果您位于相同的上下文中,或者您将正确的上下文节点作为参数generate-id(myNode),则它将生成相同的ID。您可以通过任何返回节点集的XPath函数替换myNode