2013-10-30 58 views
0

我有一個使用XML和XSL的html頁面。還有一些html標籤,如<table>,<tr><td>。我想從javaScript訪問這些標籤,併爲它的來自javaScript的屬性設置值。我嘗試使用GetElementById,GetElementByName,GetElementByTagName訪問下面發佈的代碼,但無法這樣做。無法訪問JavaScript中xsl中存在的Html標記

摘錄代碼:

<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」),並在快速監視檢查它返回一個對象,但計數0.

我搜索了很多,但找不到任何相關的東西。我很新的XML和XSL請引導。

+1

阿努普,有沒有的getElementById功能,它的getElementById,你嘗試了嗎? – Fernando

+1

另請注意,名稱空間http://www.w3.org/TR/WD-xsl中的XSL代碼是W3C標準XSLT的專有,現今不受支持的前身。 –

+1

AFAIK 是非法的,請使用。 此外,TWRow似乎是的屬性,而不是元素。 alert(document.getElementById(「trSchedule」))應該顯示對象的類型。 另外,官方HTML屬性必須是小寫字母(SRC-> src)。 同樣,缺少匹配屬性 - 除非將其嵌入到某處。而且,我假定代碼摘錄來自不同的文檔,因爲文檔只能有一個根節點? 順便說一句,嘗試在Chrome中運行它,它有非常嚴格的錯誤檢查。 – Kenney

回答

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> 

這不是理由實際上是創建一個屬性,叫做TWRow您TR元素

<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">