我正在使用具有XML文件的Flash地图。我使用XSLT从XML填充了地图网页(flash地图之外)的列表。我想通过XSL添加一个JS函数,从XML中选择将与地图交互的XML(已填充)元素。
例如,我的列表是50个州。以下是XML的一小部分:
<attributes>
<col name="State">Kentucky</col>
<STATENAME>Kentucky</STATENAME>
</attributes>
等......所有50个州都包含在XML中,如上所述
以下是我填充列表的方式:
<table border="0">
<tr bgcolor="#9acd32">
<th>State</th>
</tr>
<xsl:for-each select="map/layer/feature/attributes">
<xsl:sort select="STATENAME"/>
<tr>
<td><a onMouseOver='highlight()' onMouseOut='highlight_clear()'><xsl:attribute name="href">http://mysite.com/<xsl:value-of select="STATENAME"/>.html</xsl:attribute><xsl:value-of select="STATENAME" /></a></td>
</tr>
</xsl:for-each>
</table>
所有50个州都以这种方式提供指向其个人页面的链接:http://mysite.com/statename.html
这是Javascript:
function highlight() {
theMap.features('State="Kentucky"').highlight({visible: true, fillColor: "#FFFF00", fillAlpha: 1.0});
}
这里的关键是('State =“Kentucky”')我试图让State to =在列表中填充的SAME状态,而不必编写50个不同的函数 - 一个用于每个州。例如,当填充所有50个州时,如果鼠标越过德克萨斯州,它将自动调出Map.features('State =“Texas”')如果它越过内布拉斯加州,那么它将调出内布拉斯加州。
我试过这样做:
function highlight() {
var sn='<xsl:value-of select="STATENAME"/>';
theMap.features('State="sn"').highlight({visible: true, fillColor: "#FFFF00", fillAlpha: 1.0}); }
但它不起作用,我认为也不会。但是,它本质上是我想要发生的事情。
想法?
答案 0 :(得分:0)
你应该可以这样做:
<table border="0">
<tr bgcolor="#9acd32">
<th>State</th>
</tr>
<xsl:for-each select="map/layer/feature/attributes/STATENAME">
<xsl:sort select="."/>
<tr>
<td>
<a onMouseOver='highlight("{.}")'
onMouseOut='highlight_clear()'
href='http://mysite.com/{.}.html'>
<xsl:value-of select="." />
</a>
</td>
</tr>
</xsl:for-each>
</table>
然后只需将highlight()函数更改为:
function highlight(state) {
theMap.features('State="' + state + '"')
.highlight({visible: true,
fillColor: "#FFFF00",
fillAlpha: 1.0});
}