2014-11-07 5 views
1

У меня есть следующий XSL-файл, который будет повторяться много раз (в моем случае 4 раза):Как добавить в конец номера к ID внутри файла XSL

<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"); 
     } 
    } 
} 

проблема у меня сейчас сценарий только принимает один я nstance.

Как добавить число после spanCity, чтобы убедиться, что все они уникальны в XSL-файле?

Таким образом, это будет # spnCity1, # spnCity2, # spnCity3, # spnCity4 ...

ответ

2

В случае, при условии, XSLT часть, например, в <xsl:for-each> цикле, вы можете использовать position(), чтобы получить увеличенное значение (текущее положение в цикле) и concat():

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

Update, как предложенный подход не работает в настройках:

Два различных вида обозначений, которые должны работать, являются:

<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 с обеих версий.

+0

Спасибо. Это не будет случайным числом? Значит, он начнется с «1» и увеличивается на столько же ID? – Si8

+1

@ SiKni8 Да, но, как уже упоминалось, это зависит от того, где он применяется. Если, например, в цикле 'for-each', он будет увеличивать и возвращать позицию текущего узла в цикле относительно всех узлов в списке выбранных узлов. Для справки, например. http://msdn.microsoft.com/en-us/library/ms256233%28v=vs.110%29.aspx –

+0

Да, он находится внутри 'for-each'. Я проверю это. Благодарю. – Si8

Смежные вопросы