2014-05-15 16 views
2

我試圖使用getBBox方法來獲取SVG渲染內的文本元素的寬度,但由於一些奇怪的原因它只能工作一半的時間,另一半它失敗..SVG - > getBBox失敗,但只有一半的時間

下面是我使用我的JS代碼:

console.log(iElement.find('.yLabel2:eq(2)')[0].getBBox()); 
var passWidth = numberTitle2.node().getBBox().width; 

所以一半的時間它會記錄[object SVGRect]並設置passWidth的寬度,這是真棒。但在其他時間,它記錄了[object Exception],不會記錄寬度,並打破其後的JavaScript的其餘部分。

裏面的例外對象有name: "NS_ERROR_FAILURE"result: 2147500037

一個更好的方式來獲得一個SVG元素的寬度就如何得到這個工作的順利開展任何意見或?

+0

您確定您正在成功訪問有效的元素嗎? – AmeliaBR

+0

@AmeliaBR我很肯定,否則它根本無法工作。由於某種原因,這是非常麻煩的。 – pashOCONNOR

+0

你用它做什麼?會[[getComputedTextLength()'](http://www.w3.org/TR/SVG11/text.html#__svg__SVGTextContentElement__getComputedTextLength)工作?即使文本元素尚未添加到文檔中,它也應該提供有效的值。 – AmeliaBR

回答

1

如果未呈現文本,它將在Firefox中失敗。例如。它是display:none或者你沒有將它附加到文檔中。

+0

有沒有什麼方法可以等待渲染完成?這似乎只有一半的時間沒有通過。你也提出了一個很好的觀點,在Chrome中它爲所有getBBox值記錄0 ...有沒有更好的方法來做到這一點? – pashOCONNOR

+0

有一個onload事件可以觸發''元素,您可以將其插入。 –