SVG 圆圈、文本或线条上的可点击 link

Clickable link on a SVG circle, text or line

使用 snapsvg.io,我想知道是否可以向 SVG 文本、圆圈或线条添加可点击的 link,例如 <a href="somelink.com"/>My Link</a> 标签。

我这里的一个例子是文本:

var s = Snap("#svg");
var text = s.text(x + 10, y - 5, 'My Text');
text.attr({
        fill: doesExist ? alert : textColorOK,
        fontSize: '10px',
        'font-weight': '600',
        'font-family': 'Arial Narrow, sans-serif',
        'text-anchor': 'start',
        cursor: doesExist ? 'pointer' : 'default'
      });

我想用 snapsvg.io 来做这件事。此外,我想以 JavaScript,而不是 jQuery.

的形式进行

有一个SVG <a> element

我不了解 Snap,根据我的快速测试,我无法直接从库中设置 xlink:href,但这里有一个解决方法:

var s = Snap("#mySVG1");

var a = s.el('a');

a.node.setAttributeNS('http://www.w3.org/1999/xlink', 'href', 'http://whosebug.com');

a.add(s.text(0, 100, "I'm a link"))
<script src="http://cdn.jsdelivr.net/snap.svg/0.1.0/snap.svg-min.js"></script>
<svg id="mySVG1" height="200" width="200" viewBox="0 0 200 200">
</svg>

Kaiido 的答案是正确的(所以我正在使用那个,所以不要接受这个作为答案),但如果有帮助,只是为了扩展那个答案,你可以添加一个插件来做到这一点,以备不时之需经常这样做,所以它看起来像这样...

Snap.plugin( function( Snap, Element, Paper, global ) {
    Element.prototype.a = function( link, element ) {
        var a = this.el('a');
        // prev was var a = s.el('a'); // but thats limited to just one paper.
        a.node.setAttributeNS('http://www.w3.org/1999/xlink', 'href', link);
        return a.add( element )
    };
});

var c = s.circle(20,20,20);
var t = s.text(0,100,'Hi there, click me')
s.a( 'http://www.whosebug.com', c).attr({ stroke: 'red', fill: 'red'})
s.a( 'http://www.whosebug.com', t).attr({ stroke: 'red', fill: 'red'})

感谢回复,但最终使用了点击事件,比如文本元素,即

text.click(function () {
    window.location.href = "http://whosebug.com/";
});