无法获得SVG样式CSS

时间:2018-04-18 10:13:05

标签: javascript jquery css svg

我从服务器获取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>

也许有人知道为什么会这样。

1 个答案:

答案 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;首先,你可以稍后再设置它。