如果你必须处理不处理SVG图形的库,你可以使用类似以下代码来定义分割SVGAnimatedString。对于其他字符串原型方法,重复此操作。
// Set a split prototype on the SVGAnimatedString object which will return the split of the baseVal on this
// SVGAnimatedString instance
SVGAnimatedString.prototype.split = function(){ return String.prototype.split.apply(this.baseVal, arguments); };
SVGAnimatedString.prototype.toString = function () { return this.baseVal; }
许多库都遇到了这个问题(即此处)。在SVG中,当你尝试获取锚点的href属性时,它会返回一个SVGAnimatedString
。你可以通过使用SVGAnimatedString.baseVal
来获取实际字符串。我不知道如何在不打补丁的情况下做到这一点,但这会给你一个想法:
this.$$rewriteAppUrl = function(absoluteLinkUrl) {
if (absoluteLinkUrl.baseVal != null) {
absoluteLinkUrl = absoluteLinkUrl.baseVal;
}
if(absoluteLinkUrl.indexOf(appBaseUrl) == 0) {
return absoluteLinkUrl;
}
}
xx.baseVal.hasOwnProperty('baseVal')
而不是 xx.baseVal != null
。 - cuixiping我在不使用d3的情况下遇到了同样的问题。我只使用纯SVG并将其附加到带有angularJS控制器的DOM中。问题不在于d3。您可以通过在包含链接的元素上添加返回false值到jQuery点击事件处理程序来解决此问题。
我的SVG的一部分:
<g id="1" class="node">
<a xlink:title="title">
<polygon fill="#cccccc" stroke="#cccccc" points="25,-434 25,-457 98,-457 98,-434 25,-434"></polygon>
<polygon fill="none" stroke="black" points="25,-434 25,-457 98,-457 98,-434 25,-434"></polygon>
<text text-anchor="start" x="29.5" y="-442.3" font-family="Arial" font-size="14.00">title</text>
<polygon fill="transparent" stroke="black" points="25,-412 25,-434 98,-434 98,-412 25,-412"></polygon>
<text text-anchor="start" x="37" y="-419.8" font-family="Arial" font-size="14.00">title</text>
</a>
</g>
jQuery 重载方法:
$('g.node').click(function (element) {
return false;
});