我从服务器获取SVG数据svgData
作为字符串。
返回(对于我正在使用的示例.svg)62 pathes:
var svgPath = $(svgData).find('[class*="style"]');
使用以下代码我将重新计算SVG的笔触大小:
for (var i = 0; i < svgPath.length; ++i) {
oldStrokeWidth.push(jQuery(svgPath[i]).css('stroke-width').replace(/[^-\d.]/g, ''));
var newStrokeWidth = oldStrokeWidth[i] * 1.1;
jQuery(svgPath[i]).css(
'stroke-width', newStrokeWidth
);
oldStrokeWidth[i] = newStrokeWidth;
}
在oldStrokeWidth
数组中没有62个零。
我将错误追溯到这部分
jQuery(svgPath[i]).css('stroke-width')
它为每条路径提供""
。
如果我手动添加jQuery(svgPath[i]).css('stroke-width', 50)
并再次检查,我会得到正确的"50px"
答案。所以我看起来它是空的并且不包含值。工作时我希望0.5或像素值作为答案。
以下是SVG的样式部分:
<defs>
<style type="text/css"><![CDATA[
.normal {
stroke: black
}
.dimension {
stroke: green
}
.cosmetic {
stroke: blue
}
.centerLine {
stroke: red
}
.style0 {
stroke-width: 0.5
}
.style1 {
stroke-width: 0.35
}
.style2 {
stroke-width: 0.35; stroke-opacity: 0.2;
stroke-dasharray: 2,1
}
.style3 {
stroke-width: 0.35;
stroke-dasharray: 0.4,1,2,1
}
.style10 {
stroke-width: 0.35;
stroke-dasharray: 2,1
}
]]></style>
</defs>
</svg>
也许有人知道为什么会这样。
答案 0 :(得分:0)
如果你得到&#34;&#34;来自.css(&#34; stroke-width&#34;),链式替换也将返回&#34;&#34;。
因此,在oldStrokeWidth数组中以NaN结束的唯一方法是this._svgZoomFactor未定义。会发生什么:
&#34;&#34;被转换为0,如果&#39;这个&#39;并不是指正确的对象,那么你最终会得到这个._svgZoomFactor是未定义的。未定义*&#34;&#34;将评估为NaN。
检查&#39;这个&#39;是指你的构造函数。
编辑:我认为您没有提供是否在作为文档树一部分的SVG上进行DOM操作。 Jquery .css将在内部使用getComputedStyle,它将返回&#34;&#34;如果svg尚未附加。但是当你设置样式时,它会在元素上单独设置样式属性,这解释了为什么你会得到&#34;&#34;首先,你可以稍后再设置它。