基本上,如果点击特定<a>
并将其传递给另一个方法,我希望获得'URLValue'。还有其他几个<a>
元素,其中class =“LinkClass”,我编写了一个JQuery来获取被点击的元素值。
下面是一个正常工作的JQuery,它引用了XSL。
$("a.LinkClass").live("click", function() {
var URL = $(this).attr("href");
//Now call another method passing this value
});
但是,我可以直接通过XSL使用该值,在链接的事件点击时触发函数调用吗?
以下XSL:
<a class="LinkClass">
<xsl:attribute name="href">
<xsl:value-of select="URLValue"/>
</xsl:attribute>
</a>
答案 0 :(得分:1)
在浏览器上打开此XML文档时:
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test XSLT javascript injektion</title>
</head>
<body>
<h2>Test XSLT javascript injektion</h2>
<ul>
<li><a href="http://www.google.com">Google</a></li>
<li><a href="http://www.stackoverflow.com">Stack Overflow</a></li>
</ul>
</body>
</html>
此样式表为“test.xsl”:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" omit-xml-declaration="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:template match="processing-instruction()" priority="1"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xhtml:a/node()[1]">
<xsl:attribute name="onclick">
<xsl:value-of select='concat("alert('",..,"')")'/>
</xsl:attribute>
<xsl:call-template name="identity"/>
</xsl:template>
</xsl:stylesheet>
输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test XSLT javascript injektion</title>
</head>
<body>
<h2>Test XSLT javascript injektion</h2>
<ul>
<li>
<a href="http://www.google.com" onclick="alert('Google')">Google</a>
</li>
<li>
<a href="http://www.stackoverflow.com" onclick="alert('Stack Overflow')">Stack Overflow</a>
</li>
</ul>
</body>
</html>
警报适用于点击。