Javascript .load()事件在SVG加载完成后未被调用/无法访问它';内容
我有一个函数,它根据我从SVG文件计算的一些值修改SVG的内容。也就是说,它计算文件中每个路径的长度。因此,在运行脚本计算此值之前,必须完全加载SVG文件 我在Javascript .load()事件在SVG加载完成后未被调用/无法访问它';内容,javascript,jquery,html,svg,Javascript,Jquery,Html,Svg,我有一个函数,它根据我从SVG文件计算的一些值修改SVG的内容。也就是说,它计算文件中每个路径的长度。因此,在运行脚本计算此值之前,必须完全加载SVG文件 我在$(“#logoSVG”).load(function())中有脚本,但由于某些原因,它从未运行过。我还尝试了$(window).load(function())并在加载SVG之前运行它(因为此时文档中的路径数量仍然返回0)。以下是完整的脚本: <script> $("#logoSVG").load(function(
$(“#logoSVG”).load(function()
)中有脚本,但由于某些原因,它从未运行过。我还尝试了$(window).load(function()
)并在加载SVG之前运行它(因为此时文档中的路径数量仍然返回0)。以下是完整的脚本:
<script>
$("#logoSVG").load(function(){
var path = document.getElementsByTagName('path');
var length;
var anim = document.getElementsByTagName('animate');
for(i = 0; i < path.length; i++){
length = path[i].getTotalLength().toString();
path[i].setAttribute('stroke-dasharray',length+','+length);
anim[i].setAttribute('values','-'+length+';0');
}
});
</script>
$(“#logoSVG”).load(函数(){
var path=document.getElementsByTagName('path');
变异长度;
var anim=document.getElementsByTagName('animate');
对于(i=0;i
我知道该脚本可以工作,因为我在另一个文档中测试了它,其中SVG是内联编写的
如何让脚本在SVG加载之前不运行
注意:这可能是我完全错了,它实际上是在加载后被调用的。但是,如果是这样,由于某种原因,
元素没有被检测到。为什么会这样?一旦这些元素被插入到页面中,我还需要做些什么才能访问它们您可以检查document.getElementsByTagName('path')是否返回一个带有
window.setInterval()
方法如下:
window.load = function(){
var pathCheck = window.setInterval(function(){
if(document.getElementsByTagName('path').length > 0) {
window.clearInterval(pathCheck);
DoStuff();
}
}, 100);
}
function DoStuff(){
var path = document.getElementsByTagName('path');
var length;
var anim = document.getElementsByTagName('animate');
for(i = 0; i < path.length; i++){
length = path[i].getTotalLength().toString();
path[i].setAttribute('stroke-dasharray',length+','+length);
anim[i].setAttribute('values','-'+length+';0');
}
}
window.load=function(){
var pathCheck=window.setInterval(函数(){
if(document.getElementsByTagName('path')。长度>0){
清除间隔(路径检查);
DoStuff();
}
}, 100);
}
函数DoStuff(){
var path=document.getElementsByTagName('path');
变异长度;
var anim=document.getElementsByTagName('animate');
对于(i=0;i
没有意识到有某种方法可以处理加载到
中的svg文件。请参阅。您没有为getElementsByTagName()使用正确的文档
对象
,因此您将无法获得预期的匹配项。它在内联情况下工作正常,因为只有一个文档。使用时,您将使用引用的内容创建一个单独的文档。如果要从顶级文档中的脚本访问引用的文档,请确保获得正确的文档
对象
通过使用嵌入元素(例如object或iframe)上的属性,可以为内容获取正确的文档对象
window.load = function(){
var pathCheck = window.setInterval(function(){
if(document.getElementsByTagName('path').length > 0) {
window.clearInterval(pathCheck);
DoStuff();
}
}, 100);
}
function DoStuff(){
var path = document.getElementsByTagName('path');
var length;
var anim = document.getElementsByTagName('animate');
for(i = 0; i < path.length; i++){
length = path[i].getTotalLength().toString();
path[i].setAttribute('stroke-dasharray',length+','+length);
anim[i].setAttribute('values','-'+length+';0');
}
}