无法访问JavaScript中xsl中存在的Html标记

时间:2013-10-30 14:20:10

标签: javascript html xml xslt

我有一个使用XML和XSL的html页面。还有html标签,例如<table><tr><td>。我想从javaScript访问这些标记,并从javaScript为其属性设置值。我尝试使用GetElementById,GetElementByName,GetElementByTagName访问下面发布的代码,但无法这样做。

代码摘录:

<xml id="xmlSchedule" LANGUAGE=javascript onreadystatechange="return xmlSchedule_onreadystatechange()"></xml>
<xml id="xslSchedule">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <xsl:template>                                                
      <table id="tblSchedule" index='0' class="GridText" style="TABLE-LAYOUT:fixed;FONT-SIZE:9pt;FONT-FAMILY:verdana;width=100%">
        <xsl:for-each select="VOE-OBJECT/ITEM">
          <tr id="trSchedule" onmouseover="this.style.cursor='default'"> <xsl:attribute name="TWRow"></xsl:attribute>
            <td data="25" width="20" height='17' align='left'>
                <img><xsl:attribute name="SRC"><xsl:eval>getChargeIcon(this)</xsl:eval></xsl:attribute><xsl:attribute name="title"><xsl:eval>getChargeTitle(this)</xsl:eval></xsl:attribute>
                </img>
            </td>
            <td  data="24" id='tdNote' width="20" height="17" align='middle'>
                <img><xsl:attribute name="SRC"><xsl:eval>getNoteIcon(this)</xsl:eval></xsl:attribute><xsl:attribute name="title"><xsl:eval>getNoteTitle(this)</xsl:eval></xsl:attribute>
                </img>
            </td>

JavaScript功能:

   function XYZ() {
   var oRow = document.GetElementByName("TWRow");
    var oLength = oRow.childNodes.length;
   for (var i = 0; i < olength; i++) {
       oRow.childNodes.item(i).attributes.getNamedItem("data")= i;
   }

当我使用document.GetElementByName(“TWRow”)并快速检查时,它返回了一个对象但是count为0。

我搜索了很多但找不到任何相关内容。我是XML和XSL的新手,请指导。

1 个答案:

答案 0 :(得分:0)

首先,我相信你应该在这里使用“GetElementsByName”,而不是“GetElementByName”(因为它对多个同名的元素有效)

var oRow = document.GetElementByName("TWRow");

但它找不到任何内容的原因是因为HTML中没有名称为“TWRow”的元素。你不这样做的原因是因为这个XSLT

 <tr id="trSchedule" onmouseover="this.style.cursor='default'">
     <xsl:attribute name="TWRow"></xsl:attribute>

这实际上是在 tr 元素上创建一个名为 TWRow 的属性

<tr id="trSchedule" onmouseover="this.style.cursor='default'" TWRow="">

但是要使GetElementsByName起作用,它需要看起来像这样

<tr id="trSchedule" onmouseover="this.style.cursor='default'" name="TWRow">  

要解决此问题,请将XSLT更改为:

 <tr id="trSchedule" onmouseover="this.style.cursor='default'">
     <xsl:attribute name="name">TWRow</xsl:attribute>

或者更好的是,直接用你的XSLT写出属性

<tr id="trSchedule" onmouseover="this.style.cursor='default'" name="TWRow">