以编程方式将<a>添加到SVG路径对象

 手机用户2602920905 发布于 2023-01-19 15:46

我在使用JavaScript时遇到问题,以便在SVG中路径对象周围包装锚标记.所以,这里是我的SVG(缩短版本,只有两个路径)和id:

"striatum1"和"striatum2"

在id为"striatum1"的路径的情况下,我已经对链接进行了硬编码,如果路径为id"striatum2",我想以编程方式生成链接.

首先,请看一下SVG(brain.svg):






image/svg+xml

















我使用命令将SVG加载到我的HTML文件中:

Your browser does not support SVG

现在我使用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 to  within  tags
parent.appendChild(link);
link.appendChild(striatum);

因此,我得到以下DOM格式:  执行JavaScript后DOM的屏幕截图

但问题是只有硬编码链接有效 - 如果我将鼠标移到striatum1上,一切都很有效,链接就可以了.在使用JS代码修改striatum2的情况下 - 不是.怎么了?!

干杯!

1 个回答
  • 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')
    

    2023-01-19 15:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有