在 JavaScript 中动态创建 SVG 链接

2024-04-25

我正在从 JavaScript 动态创建 SVG 元素。它对于像矩形这样的视觉对象工作得很好,但是我在生成功能性的 xlinks 时遇到了麻烦。在下面的示例中,第一个矩形(静态定义)在单击时可以正常工作,但其他两个(用 JavaScript 创建)忽略单击...即使检查 Chrome 中的元素似乎显示相同的结构。

我看到出现了多个类似的问题,但没有一个能完全解决这个问题。我发现的最接近的是[通过JS在svg中添加图像命名空间仍然不显示图片 https://stackoverflow.com/questions/6893391] 但这不起作用(如下所述)。我的目标是纯粹用 JavaScript 来完成此操作,而不依赖于 JQuery 或其他库。


<!-- Static - this rectangle draws and responds to click -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="svgTag">
    <a xlink:href="page2.html" id="buttonTemplate">
        <rect x="20" y="20" width="200" height="50" fill="red" class="linkRect"/>
    </a>
</svg>

<script>
    var svgElement = document.getElementById ("svgTag");

    // Dynamic attempt #1 - draws but doesn't respond to clicks
    var link = document.createElementNS("http://www.w3.org/2000/svg", "a");  // using http://www.w3.org/1999/xlink for NS prevents drawing
    link.setAttribute ("xlink:href", "page2.html");  // no improvement with setAttributeNS
    svgElement.appendChild(link);

    var box = document.createElementNS("http://www.w3.org/2000/svg", "rect");
    box.setAttribute("x", 30); 
    box.setAttribute("y", 30);
    box.setAttribute("width", 200);
    box.setAttribute("height", 50);
    box.setAttribute("fill", "blue");
    link.appendChild(box);

    // Dynamic attempt #2 (also draws & doesn't respond) - per https://stackoverflow.com/questions/6893391
    box = document.createElementNS("http://www.w3.org/2000/svg", "rect");
    box.setAttribute("x", 40); 
    box.setAttribute("y", 40);
    box.setAttribute("width", 200);
    box.setAttribute("height", 50);
    box.setAttribute("fill", "green");
    box.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "page2.html");
    svgElement.appendChild(box);

Only an <a>可以是一个链接,因此将 xlink:href 属性添加到<rect>元素不会产生任何影响。

您需要使用 setAttributeNS ,您说它不起作用,但它对我有用,所以也许还有其他问题。

这个例子对我有用:

var svgElement = document.getElementById ("svgTag");

var link = document.createElementNS("http://www.w3.org/2000/svg", "a");
link.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "page2.html");
svgElement.appendChild(link);

var box = document.createElementNS("http://www.w3.org/2000/svg", "rect");
box.setAttribute("x", 30); 
box.setAttribute("y", 30);
box.setAttribute("width", 200);
box.setAttribute("height", 50);
box.setAttribute("fill", "blue");
link.appendChild(box);
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="svgTag">
</svg>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中动态创建 SVG 链接 的相关文章

  • 为什么打字稿编译器在生成的 JavaScript 中省略了“should.js”导入?

    我面临一个奇怪的问题 在我的 可以说 a ts我有
  • 变量前面加号的作用是什么?

    什么是 d in function addMonths d n keepTime if d mean The 运算符返回对象的数字表示形式 因此 在您的特定情况下 它似乎是根据是否d是一个非零数 参考here http en wikiboo
  • Twitter Bootstrap 的 Tab 插件中的“data-api”是什么意思

    有一段代码如 TAB DATA API function body on click tab data api data toggle tab data toggle pill function e e preventDefault thi
  • 如何按日期属性对对象数组进行排序?

    假设我有一个由几个对象组成的数组 var array id 1 date Mar 12 2012 10 00 00 AM id 2 date Mar 8 2012 08 00 00 AM 如何按日期元素从最接近当前日期和时间的日期开始对该数
  • 在哪里声明类常量?

    我使用类成员来保存常量 例如 function Foo Foo CONSTANT1 1 Foo CONSTANT2 2 这工作得很好 除了它看起来有点无组织 所有代码都特定于Foo遍布全球范围 所以我考虑将常量声明移到内部Foo 声明 但是
  • Node.js 主机名/IP 与证书的替代名称不匹配

    我正在编写一些节点代码来进行 Facebook 的服务器端登录 我已经非常接近让它完全发挥作用了 但是我在请求 auth code 时遇到了麻烦 我认为这可能与 Facebook 应用程序设置有关Site URL但我尝试过的都没有成功 我使
  • PMT功能 支付方式

    下面是我计算贷款付款的函数 就像在 Excel 中一样 我需要添加另一个参数 即付款类型 function PMT ir np pv fv ir interest rate per month np number of periods mo
  • SVG/XML 中有一些innerHTML 替代品吗?

    在 HTML 中 我可以通过提供字符串形式的模板来构建一个简单的模板系统 替换其中的某些部分 然后使用innerHTML到某个容器 var templ span myText span var newContent templ replac
  • 使用 ChartJS v2.0 自定义图例

    我正在尝试在 ChartJS v2 0 中创建自定义图例模板 在 ChartJS v1 中 我只是向新的 Chart 构造函数添加了一个属性 例如 legendTemplate ul li span style background col
  • 如何使用 Material UI 制作一个圆形复选框?

    我尝试匹配的设计要求复选框为圆形 我正在使用 Material UI 和 React 边框半径不起作用 因为实际图标的边框不是可见复选框的边框 我不能只使用像 Font Awesome 这样的东西 因为它需要实际检查和取消检查 Curren
  • 循环遍历字符串中的 html 标签并将内部文本添加到数组中

    我有一些 HTML 内容保存为字符串 我想循环遍历该字符串中的每个标题标签并获取其内部文本 let str h1 topic 1 h1 p desc of topic 1 p h1 topic 2 h1 p desc of topic 2
  • D3js 多折线图 mouseOver

    我正在努力适应this http bl ocks org mbostock 3902569D3js 折线图示例 将鼠标悬停在我的多线图表上的使用情况 看起来d3 mouse this 0 on the mousemove函数生成以下错误 无
  • canvas:如何在一个变换语句中完成平移、倾斜、旋转...?

    最近几天我在学习 变换 现在我知道如何通过变换的矩阵进行平移 旋转 倾斜 缩放 但如果我想在一个转换语句中执行上述所有操作 我该怎么办 ctx transform a b c d e f 当我们想要通过变换旋转某些东西时 我们必须为每个参数
  • 如何使用环回设置 OAuth 2.0 服务器

    我想使用名为 Loopback component oauth2 的包使用 Loopback 设置 OAuth 2 0 服务器 文档在这里 https docs strongloop com display public LB OAuth
  • 使用 var 与 let/const 进行块级变量重新声明

    Part 1 给出这个例子 var number 10 var number 42 console log number 42 为什么第 4 行不抛出Uncaught SyntaxError Identifier number has al
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 在javascript中调用c#函数[重复]

    这个问题在这里已经有答案了 可能的重复 从 Javascript 调用 ASP NET 函数 https stackoverflow com questions 3713 call asp net function from javascr
  • JSON 和 AJAX 与 jQuery 有什么区别?

    我听说 JSON 会序列化所有数据 这可以防止我在跨浏览器支持等方面遇到客户端问题 我一直在使用 AJAX 和 jQuery 这看起来很简单 但我不确定其中的区别 我读过我也可以使用它来获取数据 ajax url url dataType
  • 无法定义 set 和 get 方法

    尝试使用访问器定义属性时出现错误 这是我的代码 var person Object defineProperty person birthYear value 1997 writable true enumerable true confi
  • MutationObserver 不适合儿童

    提前为可能是一个简单的问题和下面令人震惊的 javascript 道歉 我的问题如下 网站上有一个横幅 每隔几秒钟就会显示四个图像 我正在尝试将 印象 推入数据层以供 GTM 拾取 为了显示下一个图像 我们 不是我自己 将下一个横幅图像的

随机推荐

  • 这是从片段中获取字符串资源的正确方法吗?

    在片段中读取字符串资源时 哪种方法通常更好 更安全 我在这里读到getResources getString 直接地 public class SomeFragment extends Fragment public static Some
  • C# - 从客户端检查 TCP/IP 套接字状态

    我想为我的 TCP IP 客户端类提供 CheckConnection 函数 以便我可以检查是否发生了错误 我自己的客户端断开连接 服务器断开连接 服务器卡住等 我有类似的东西 bool isConnectionActive false i
  • 无法在网络视图中滚动图像

    我为 Android 和 iOS 开发了一个 webview 应用程序 我注意到我无法滚动 Android 应用程序中的特定 html 元素 而它可以在 iOS 上运行 这是website https www blizz z de flex
  • 一个 pom 中的多个工件 ID

    有一个maven项目 jar 但现在需要将其分成两个工件 我想要两个像下面这样的 Maven 工件
  • 确保隐式定义始终具有较高/较低优先级的一般方法

    我有一个有点复杂的类型类情况 格式如下 sealed trait TypeClass S lt MyType type Out lt MyType sealed trait LowPriorityTypeClass Case OtherTy
  • Glib — 对 glib 中任何内容的未定义引用? [复制]

    这个问题在这里已经有答案了 我的 S 程序有问题 我需要用这个命令编译它 gcc I usr include glib 2 0 I usr lib x86 64 linux gnu glib 2 0 include lglib 2 0 D
  • ggplot 上的混合比例

    我想制作一个图 最好使用 ggplot2 其中 x 轴具有不同的缩放比例 更准确地说 我希望我的刻度从大约 0 001 到 0 05 是对数的 从 0 05 到 1 0 是非对数的 我当前的绘图代码是 ggplot DF aes x DF
  • 如何*真正*编写 UML 基数?

    我想一劳永逸地知道如何编写 UML 基数 因为我经常不得不争论它们 所以非常欢迎证明和来源 如果我想解释一下a Mother可以有几个Children but a Child有且仅有一个Mother 我应该写 Mother 1 Child
  • 如何在OpenCart 2.3.0.2中设置全局变量?

    当我想在模板中设置全局变量时 tpl文件 我只是使用global在 opencart 2 2 或更早版本中 例如 but 它在最新的 OpenCart 2 3 0 2 中不起作用 因为预定义的global config在控制器中相当不方便
  • 如何使用新的 Google Vision API 生成条形码并将其转换为位图?

    如何使用新的 Google Vision API 生成条形码并将其转换为位图 Barcode barcode new Barcode Barcode Email email new Barcode Email email address e
  • 字符串中最长的单词

    如何获得字符串中最长的单词 Eg string Where did the big Elephant go 回来 Elephant 循环遍历字符串中的单词 跟踪迄今为止最长的单词
  • android 中软键盘上方需要上一个、下一个按钮

    我想在键盘上方显示带有 上一个 下一个 按钮的虚拟键盘 当用户单击 上一个 按钮时 光标应移动到上一个编辑文本输入字段 单击 下一个 按钮应转到视图中的下一个编辑文本字段 如果我们在Android浏览器中打开任何要求输入的页面 我们就可以看
  • 将静态对象添加到资源字典中

    我有一个在多个视图中引用的类 但我希望它们之间只共享该类的一个实例 我已经像这样实现了我的课程 using System public class Singleton private static Singleton instance pr
  • GoDaddy Linux 上的 PHP 共享尝试通过 GMAIL SMTP 发送

    我已经尝试过 StackOverflow 和其他网站上发布的每一个脚本 代码 方法 但没有运气 我在 GoDaddy 上托管 我已经设置了一个 Google App 帐户 设置了 MX 记录所需的一切 使用 GoDaddy 工具 甚至尝试从
  • 在没有未定义行为的情况下,哪些 float 值无法转换为 int [c++]?

    我刚刚从 C 14 标准中读到了这个 我的重点 4 9 浮点积分转换 conv fpint 1浮点类型的纯右值可以转换为整数类型的纯右值 转换截断 也就是说 小数部分被丢弃 如果无法截断值 则行为未定义 以目标类型表示 这让我思考 其中 如
  • jQueryUI 可拖动 + 可排序错误(无法读取未定义的属性“选项”)

    我的问题似乎类似于这个问题 从可排序列表拖动到拖放插件 https stackoverflow com questions 17928139 dragging from a sortable list to a drag and drop
  • 如何从 ispell 私人词典中删除条目?

    我想知道如何从 ispell 私人词典中删除一个 错误插入的 条目 单词 EDIT 经过更多挖掘后 我仍然无法从默认字典中删除条目 但我认为解决方案可能是构建哈希程序 问题是生成要删除的条目列表 我找不到简单的示例 您应该能够编辑您的个人词
  • 使用 Shell 脚本自动安装 R-Studio

    有没有办法在 Linux 系统上自动安装 R Studio 它应该自动检测操作系统并安装具有所需依赖项的 R 和 R Studio 谢谢 我准备了以下 shell 脚本来使安装完全自动化 bin bash Program R Studio
  • 使用 Retrofit 通过 GSON 获取嵌套 JSON 对象

    我正在使用 Android 应用程序中的 API 所有 JSON 响应如下所示 status OK reason Everything was fine content lt some data here gt 问题是我所有的 POJO 都
  • 在 JavaScript 中动态创建 SVG 链接

    我正在从 JavaScript 动态创建 SVG 元素 它对于像矩形这样的视觉对象工作得很好 但是我在生成功能性的 xlinks 时遇到了麻烦 在下面的示例中 第一个矩形 静态定义 在单击时可以正常工作 但其他两个 用 JavaScript