更改后重新加载DOM

问题描述:

我在嵌入标记中使用SVG存在一个小问题。我使用JavaScript更新了带有SVG文件路径的嵌入标签的源代码。然后我必须更新viewbox属性才能正确调整SVG的大小。更改后重新加载DOM

问题是SVG标记不可用,因为JavaScript执行速度太快。

一个例子:

//Creation and insertion by JQuery 
var EmbedTag = $("<embed id='zoomSVG' src=idSVG + ".svg' type='image/svg+xml' width='500px' height='500px' />").appendTo(zoomGalleryHisto); 

//This doesn't work : svgDoc is null 
//SVG document recovery 
var svgDoc = document.getElementById('zoomSVG').getSVGDocument(); 

This work : 
setTimeout(function(){ 
    //SVG document recovery 
    var svgDoc = document.getElementById('zoomSVG').getSVGDocument(); 
},100); 

我想是因为超时值取决于硬件不使用setTimeout函数。有时100毫秒工作正常,但我必须找到一个通用的解决方案。

嵌入标签插入后,我可以通过JavaScript重新加载DOM?当嵌入对象的加载完成时,是否存在嵌入标记的现有事件?

感谢您的帮助

使用标签的»onload事件«事件,直到它被装载耽误您的功能,比应该可用。

+0

这是我做的,但onload事件不与IE8 – user1069516 2013-02-22 13:37:03

+0

赶上罗伯特Longson如上所述,IE8不支持SVG所以你的问题是与IE8和SVG,什么不是问题。 – philipp 2013-02-22 17:53:39

调用嵌入的onload中的代码例如

var EmbedTag = $("<embed id='zoomSVG' onload='init()' src=idSVG + ".svg' type='image/svg+xml' width='500px' height='500px' />").appendTo(zoomGalleryHisto); 

,然后实现你的代码中的init(或任何你想将它命名)

+0

谢谢,它工作正常 – user1069516 2013-02-22 12:26:34

+0

但与Internet Explorer 8它不起作用 – user1069516 2013-02-22 12:56:12

+0

IE8本身不支持SVG – 2013-02-22 13:49:59

首先,创建元素,然后你想在DOM再次找到它。

二,JavaScript不能阻止,直到发生什么事情,使用回调保证。

类似的东西:

var svgDoc = false; 
// Create an element 
var EmbedTag = $("<embed id='zoomSVG' type='image/svg+xml' width='500px' height='500px' />"); 
// Append it to the dom 
EmbedTag.appendTo(zoomGalleryHisto); 

// Load the svg file 
$.get('file.svg', function() { 
    // And then add it to the created element 
    EmbedTag.attr('src', 'file.svg'); 
    svgDoc = EmbedTag.getSVGDocument(); 
}); 
+0

我不加载SVG文件与ajax,SVG文件是通过嵌入标签加载 – user1069516 2013-02-22 13:26:45

+0

其相同!嵌入标签应该创建一个HTTP请求来检索文件。现在我们通过get检索它,缓存它,然后将它附加到嵌入元素。 – Oden 2013-02-22 13:43:15

+0

是的,但getSVGDocument返回null,JavaScript太快了。如果我在EmbedTag.attr('src','file.svg');和svgDoc = EmbedTag.getSVGDocument();有用 – user1069516 2013-02-22 13:51:11