使用JQuery查找XSL xpath值

时间:2014-04-17 22:31:42

标签: javascript jquery html xml xslt

我遇到了一些解决以下问题的问题。

以下代码根据xpath @label属性创建一个下拉菜单。

    <select name="endYear" id="endYear" class="validate[required]">
       <xsl:for-each select="/campusRoot/yearList/yearList">
        <option value="{@endYear}">
          <xsl:value-of select="@label"/>
        </option>
       </xsl:for-each>
     </select>

我想根据下拉菜单中选择的不同标签动态查找注册类型?以下是XML:

    <yearList>
      <yearList olr_yearID="1" endYear="2012" label="11-12"  active="false" registrationType=""/>
      <yearList olr_yearID="2" endYear="2013" label="12-13" active="false" registrationType="Immediate"/>
      <yearList olr_yearID="10" endYear="2015" label="14-15 Summer Academy" active="true" registrationType="Summer Academy"/>
      <yearList olr_yearID="13" endYear="2014" label="13-14 Summer Academy" active="true" registrationType="Summer Academy"/>
    </yearList>

然后我想将此值作为隐藏输入传递。

仅供参考...结束时并不总是截然不同;即每个endYear有多个registrationTypes。

谢谢你的期待。

2 个答案:

答案 0 :(得分:1)

我会考虑做类似的事情:

<select name="endYear" id="endYear" class="validate[required]">
   <xsl:for-each select="/campusRoot/yearList/yearList">
    <option value="{@endYear}" data-id="{@olr_yearID}" data-active="{@active}" data-type="{@registrationType}">
      <xsl:value-of select="@label"/>
    </option>
   </xsl:for-each>
</select>

然后做:

$('#endYear').change(function() {
    alert($(this).find(':selected').attr('data-type'));
});

答案 1 :(得分:0)

以下是我原始问题的一个有效解决方案:

头脑中:

var yearList = [];
<xsl:for-each select="/campusRoot/yearList/yearList">
  yearList['<xsl:value-of select="@olr_yearID"/>'] = {registrationType: '<xsl:value-of select="@registrationType"/>', endYear: '<xsl:value-of select="@endYear"/>'}
</xsl:for-each>

$(document).ready(function(){
  $(window).load(function(){
    registration();

    $('#reglabel').change(function() {
      registration();
    });

    function registration() {
      var result = yearList[$('#reglabel').val()].registrationType;
      var result2 = yearList[$('#reglabel').val()].endYear;
      document.getElementById('registrationType').value = result;
      document.getElementById('endYear').value = result2;
    }
  });

在体内放:

<select name="reglabel" id="reglabel" class="reglabel" >
  <xsl:for-each select="/campusRoot/yearList/yearList">
    <option value="{@olr_yearID}">
      <xsl:value-of select="@label"/>   
    </option>
  </xsl:for-each>
</select>

注意:olr_yearID是distinct,它是查找正确属性所必需的。要实现此答案,您必须导入JQuery库。 document.getElementById指的是与其他参数一起提交的隐藏输入。

此外,还有另一种方法可以使用AJAX来动态生成XML,但由于我已经需要为其他目的加载XML,这可能是我实现的最有效的解决方案。

希望这可以帮助将来的某个人。