我在使用JavaScript时遇到问题,以便在SVG中的路径对象周围包装锚标记.所以,这里是我的SVG(缩短版本,只有两个路径)和id:
"striatum1"和"striatum2"
在id为"striatum1"的路径的情况下,我已经对链接进行了硬编码,如果路径为id"striatum2",我想以编程方式生成链接.
首先,请看一下SVG(brain.svg):
我使用命令将SVG加载到我的HTML文件中:
现在我使用JavaScript和DOM操作来简单地用锚包装路径,如下所示:
var brain = document.getElementById('brain'); var inside_brain = brain.contentDocument; var svg = inside_brain.getElementById('svg3194'); var svgNS = svg.getAttribute('xmlns'); // I need some part of an SVG image var striatum = inside_brain.getElementById('striatum2'); var parent_id = striatum.getAttribute('parent_id'); var parent = inside_brain.getElementById(parent_id); // let's make a link var link = document.createElementNS(svgNS, "a"); link.setAttributeNS(svgNS, 'xlink:href', '/?q=striatum') link.setAttributeNS(svgNS, 'target', '_top') // and now just attaching the link with SVG path inside towithin
因此,我得到以下DOM格式:
但问题是只有硬编码链接有效 - 如果我将鼠标移到striatum1上,一切都很有效,链接就可以了.在使用JS代码修改striatum2的情况下 - 不是.怎么了?!
干杯!
href属性不在SVG名称空间中,它位于xlink名称空间中.目标也在null命名空间中.所以
link.setAttributeNS(svgNS, 'xlink:href', '/?q=striatum') link.setAttributeNS(svgNS, 'target', '_top')
应该
link.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '/?q=striatum') link.setAttribute('target', '_top')