Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .load()事件在SVG加载完成后未被调用/无法访问它';内容_Javascript_Jquery_Html_Svg - Fatal编程技术网

Javascript .load()事件在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(

我有一个函数,它根据我从SVG文件计算的一些值修改SVG的内容。也就是说,它计算文件中每个路径的长度。因此,在运行脚本计算此值之前,必须完全加载SVG文件

我在
$(“#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');
  }
}