【问题标题】:How to append a number to an ID inside an XSL file如何将数字附加到 XSL 文件中的 ID
【发布时间】:2015-01-04 17:56:49
【问题描述】:

我有以下 XSL 文件,它将被重复多次(在我的例子中是 4 次):

<xsl:if test="Html/root/lcGroup/txtCity != ''">
    <div id="labOCSign" class="tableHeading"></div>
    <h4>
        <span id="spnCity">
            <xsl:value-of select="Html/root/lcGroup/txtCity" />
        </span>
        <xsl:if test="Html/root/lcGroup/txtZip != ''">
            <xsl:text>, </xsl:text>
            <xsl:value-of select="Html/root/lcGroup/dlState" />
            <xsl:text>&#160;</xsl:text>
            <xsl:value-of select="Html/root/lcGroup/txtZip" />
        </xsl:if>
    </h4>
</xsl:if>

CSS:

.tableHeading
{
    background: #E5E5E5 url("../theImages/recommendationBadge.png") top left no-repeat;
    padding-top: 60px;
    padding-bottom: 25px;
}
.tableHeading2
{
    background: #E5E5E5 url("../theImages/recommendationBadge2.png") top left no-repeat;
    padding-top: 60px;
    padding-bottom: 25px;
}

我有以下 JQuery 将替换 labOCSign 的类:

var cityName = $(".spnCity").text();
var weekDay = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][(new Date()).getDay()];

if (cityName.toLowerCase() == "rye") {
    if (weekDay == "Monday" || weekDay == "Wednesday" || weekDay == "Friday") {
        if (validNow("08:00AM", "5:30PM")) {
            $("#labOCSign").removeClass("tableHeading2").addClass("tableHeading");
        }
        else {
            $("#labOCSign").removeClass("tableHeading").addClass("tableHeading2");
        }
    }
}
else if (cityName.toLowerCase() == "new roc") {
    if (weekDay == "Monday" || weekDay == "Wednesday" || weekDay == "Friday") {
        if (validNow("08:00AM", "5:30PM")) {
            $("#labOCSign").removeClass("tableHeading2").addClass("tableHeading");
        }
        else {
            $("#labOCSign").removeClass("tableHeading").addClass("tableHeading2");
        }
    }
}

我现在遇到的问题是脚本只需要一个实例。

如何在spanCity 之后添加一个数字以确保它们在 XSL 文件中都是唯一的?

所以,它将是#spnCity1、#spnCity2、#spnCity3、#spnCity4...

【问题讨论】:

    标签: jquery xml xslt


    【解决方案1】:

    如果提供的 XSLT 部分是例如在&lt;xsl:for-each&gt; 循环中,您可以使用position() 获取递增值(循环中的当前位置)和concat()

    <span id="concat('spnCity', position())">
    

    更新建议的方法在设置中不起作用:

    应该工作的两种不同的符号是:

    <span>
      <xsl:attribute name="id" select="concat('spnCity', position())"/>
    </span>
    

    <span>
      <xsl:attribute name="id">
        <xsl:value-of select="concat('spnCity', position())"/> 
      </xsl:attribute>
    </span>
    

    内容可以直接加在属性后面:

    <span>
      <xsl:attribute name="id">
        <xsl:value-of select="concat('spnCity', position())"/> 
      </xsl:attribute>
      <xsl:value-of select="Html/root/lcGroup/txtCity" />
    </span>
    

    刚刚创建了两个版本的Demo

    【讨论】:

    • 谢谢。不会是随机数吧?所以它将从1 开始并增加尽可能多的ID?
    • @SiKni8 是的,但如前所述,这取决于它的应用位置。如果例如在for-each 循环中,它将递增并返回当前节点在循环中相对于选定节点列表中所有节点的位置。供参考,例如msdn.microsoft.com/en-us/library/ms256233%28v=vs.110%29.aspx
    • 当我查看 HTML 源代码时,我看到的是:&lt;h4&gt;&lt;span id="concat('spnCity', position())"&gt;Beverly&lt;/span&gt;, NY 12360&lt;/h4&gt; 而不是 ID 本身。
    • @SiKni8 刚刚用一个应该可以工作的附加版本更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多