gpt4 book ai didi

Javascript 比另一个属性上的 XSLT generate-id() 更好地识别回调节点

转载 作者:行者123 更新时间:2023-11-30 06:09:18 24 4
gpt4 key购买 nike

在这个例子中,init() 能够使用传递给它的参数:

 <body onload="init(this);">

testdOnChange() 在这个例子中使用了更复杂的 XSLT generate-id() 技术:

  <testd:test
testd_id="TESTD_ID_id0x03cc1988"
testd_on_load="testdOnChange(testdGetElementById('TESTD_ID_id0x03cc1988'));"
/>

是否有更直接的技术可用?

XML 代码 http://emle.sourceforge.net/emle020000/testd1.xml :

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="testd1.xsl" type="text/xsl"?>
<emle xmlns="http://emle.sourceforge.net/emle020000" />

XSLT 代码 http://emle.sourceforge.net/emle020000/testd1.xsl :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:emle="http://emle.sourceforge.net/emle020000" xmlns:testd="http://emle.sourceforge.net/emle020000/testd" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" media-type="application/xhtml+svg+mathml" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

<xsl:template match="/emle:emle">
<html>
<head>
<script type="text/javascript">
//<![CDATA[
function init(aThis) {alert("init(" + aThis + ")");
var result = document.evaluate("//@testd_on_load",
aThis.document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i=0; i<result.snapshotLength; i++){
n=result.snapshotItem(i).nodeValue;
eval(n);
}
}
function testdGetElementById(aTestdID){alert("testdGetElementById("+aTestdID+")");
return document.evaluate("//*[@testd_id='" + aTestdID + "']",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).
singleNodeValue;
}
function testdOnChange(aNode){alert("testdOnChange("+aNode.nodeName+")");}
//]]>
</script>
</head>
<body onload="init(this);">
<testd:test>
<xsl:attribute name="testd_id">TESTD_ID_<xsl:value-of select="generate-id()"/>
</xsl:attribute>
<xsl:attribute name="testd_on_load">testdOnChange(testdGetElementById(
'TESTD_ID_<xsl:value-of select="generate-id()"/>'));</xsl:attribute>
</testd:test>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

最佳答案

这看起来很奇怪,但如果我理解正确的话,您希望能够编写您的自定义事件处理程序,以便它们可以轻松获得对它们所附加的元素的引用。这应该不难;毕竟,您是自己调用自定义处理程序,所以您已经知道它附加到哪个元素 - 您只需要将其传递给处理程序本身:

function init(aThis) {
var result = document.evaluate("//@testd_on_load",
aThis.document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

for (var i=0; i<result.snapshotLength; i++) {
var n = result.snapshotItem(i); // attribute node
var s = n.nodeValue; // script to run
var e = n.ownerElement; // element for context

(new Function(s)).call(e); // run script with `this` set to the context node
}
}

现在您可以简化您的事件代码:

<xsl:attribute name="testd_on_load">testdOnChange(this);</xsl:attribute>

关于Javascript 比另一个属性上的 XSLT generate-id() 更好地识别回调节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/993231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com