gpt4 book ai didi

javascript - 如何使用 Javascript 从 SVG 路径动态创建链接

转载 作者:行者123 更新时间:2023-12-01 01:02:14 25 4
gpt4 key购买 nike

指向 svg 路径的动态链接不会呈现,但会显示在 Chrome 的检查器中

我有一个 SVG 文件,其中包含数百个包含 ID 的路径。我编写了一些 JavaScript 来从每个路径中提取 ID 并将其包装在链接中。当我在 Chrome 中查看检查器时,我的代码可以工作,但它没有在页面上呈现为可点击的链接。我在某处读到这是因为它是 SVG 而不是 HTML,但我找不到任何方法来解决这个问题。

SVG 文件

<svg id="shapes" data-name="shapes" xmlns="http://www.w3.org/2000/svg" width="58.7" height="218.6" viewBox="0 0 58.7 218.6"><title>shapes</title><path id="circle" d="M129.6,31.5c-3.1,2.2-4,6.5-4.6,10.3-1,5.9-1.9,11.8-1.3,17.8s2.8,11.9,7.3,15.8c7.7,6.6,20.7,4.8,27.4-2.8,3.9-4.5,5.8-10.2,7.6-15.8,2.9-9,3.8-21.1-5.8-26.4C153.9,26.9,135.1,27.7,129.6,31.5Z" transform="translate(-120.3 -28.1)"/><path id="square" d="M167.6,117.1a354.3,354.3,0,0,1,2.3,53.5,193.3,193.3,0,0,1-43-1.2c-1.8-9.3-10.9-44.1-4.1-51.3C126,114.6,167.7,117.7,167.6,117.1Z" transform="translate(-120.3 -28.1)"/><path id="triangle" d="M127.1,246.7c2.4-2.6,6.4-2.7,9.9-2.7h42c-2.2,0-12.4-20.8-14.1-23.6-2.8-4.5-9.6-20.8-15.7-21.4S130.4,239.6,127.1,246.7Z" transform="translate(-120.3 -28.1)"/></svg>

Javascript

            $(document).ready(function(){

var $array = [];
$('path[id]').each(function(){

var id = $(this).attr('id');

$(this).wrap( "<a href="+"https://www.google.com/search?q="+id+"></a>" );

$array.push(id);

});
console.log($array);


});

每个形状都应该是一个可点击的链接,指向从 ID 中提取的动态值。当我运行代码时,形状从 Canvas 上消失,但在 Chrome 的检查器中我看到了所需的结果。

<svg id="shapes" data-name="shapes" xmlns="http://www.w3.org/2000/svg" width="58.7" height="218.6" viewBox="0 0 58.7 218.6"><title>shapes</title>
<a href="https://www.google.com/search?q=circle"><path id="circle" d="M129.6,31.5c-3.1,2.2-4,6.5-4.6,10.3-1,5.9-1.9,11.8-1.3,17.8s2.8,11.9,7.3,15.8c7.7,6.6,20.7,4.8,27.4-2.8,3.9-4.5,5.8-10.2,7.6-15.8,2.9-9,3.8-21.1-5.8-26.4C153.9,26.9,135.1,27.7,129.6,31.5Z" transform="translate(-120.3 -28.1)"></path></a>
<a href="https://www.google.com/search?q=square"><path id="square" d="M167.6,117.1a354.3,354.3,0,0,1,2.3,53.5,193.3,193.3,0,0,1-43-1.2c-1.8-9.3-10.9-44.1-4.1-51.3C126,114.6,167.7,117.7,167.6,117.1Z" transform="translate(-120.3 -28.1)"></path></a>
<a href="https://www.google.com/search?q=triangle"><path id="triangle" d="M127.1,246.7c2.4-2.6,6.4-2.7,9.9-2.7h42c-2.2,0-12.4-20.8-14.1-23.6-2.8-4.5-9.6-20.8-15.7-21.4S130.4,239.6,127.1,246.7Z" transform="translate(-120.3 -28.1)"></path></a></svg>

这是我的代码的链接:https://jsfiddle.net/L5d8oufj/

最佳答案

因为您要求的是 javascript 答案:
因为 SVG 元素位于不同的命名空间中,所以这很重要

window.onload =()=>{

const NamSpace= 'http://www.w3.org/2000/svg';
let $array = [];

document.querySelectorAll('#shapes path').forEach(el=>{

$array.push(el.id)

const wrapper = document.createElementNS(NamSpace,'a');

wrapper.setAttribute( 'href', `https://www.google.com/search?q=${el.id}`);

el.parentNode.insertBefore(wrapper, el);
el.parentNode.removeChild(el);
wrapper.appendChild(el);
})

console.log($array);
}
<svg id="shapes" data-name="shapes" width="58.7" height="218.6" viewBox="0 0 58.7 218.6">
<title>shapes</title>
<path id="circle"
d="M129.6,31.5c-3.1,2.2-4,6.5-4.6,10.3-1,5.9-1.9,11.8-1.3,17.8s2.8,11.9,7.3,15.8c7.7,6.6,20.7,4.8,27.4-2.8,3.9-4.5,5.8-10.2,7.6-15.8,2.9-9,3.8-21.1-5.8-26.4C153.9,26.9,135.1,27.7,129.6,31.5Z"
transform="translate(-120.3 -28.1)"/>
<path id="square"
d="M167.6,117.1a354.3,354.3,0,0,1,2.3,53.5,193.3,193.3,0,0,1-43-1.2c-1.8-9.3-10.9-44.1-4.1-51.3C126,114.6,167.7,117.7,167.6,117.1Z"
transform="translate(-120.3 -28.1)"/>
<path id="triangle"
d="M127.1,246.7c2.4-2.6,6.4-2.7,9.9-2.7h42c-2.2,0-12.4-20.8-14.1-23.6-2.8-4.5-9.6-20.8-15.7-21.4S130.4,239.6,127.1,246.7Z"
transform="translate(-120.3 -28.1)"/>
</svg>

关于javascript - 如何使用 Javascript 从 SVG 路径动态创建链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959849/

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