.load() 事件在 SVG 完成加载后未被调用/无法访问其内容
.load() event not being called after SVG is done loading / Cannot access it's contents
我有一个函数,可以根据我从 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>
我知道该脚本有效,因为我已经在另一个内联编写 SVG 的文档中对其进行了测试。在这种情况下,我将其加载到<object>
中:
<object id="logoSVG" data="imgs/logo.svg" type="image/svg+xml" style="display:block;">
<img src="imgs/fallback.png" width="100%" style="display:block;"/>
</object>
如何让脚本在加载 SVG 之前不运行?
注意:我可能完全错了,它实际上是在加载后调用的。但是,如果是这种情况,由于某种原因,没有检测到任何<path>
元素。为什么会这样?将这些元素插入页面后,我还需要执行其他操作才能访问它们吗?
没有意识到有某种方法可以处理加载到<object>
中的 svg 文件。看这里。
您没有为getElementsByTagName()
使用正确的document
对象,因此您将无法获得预期的匹配项。它在内联情况下工作正常,因为那时只有一个文档。使用
通过在嵌入元素(例如对象或 iframe)上使用 contentDocument
属性,您可以为内容获取正确的文档对象。
相关文章:
- "访问控制允许起源”;通过javascript从http页面调用同一网站的httpsurl时出现问题
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 使用jQuery从ajax调用访问键值对
- 为什么可以't在对指令的html调用中访问$rootScope
- Odoo销售点如何访问模型并使用JS调用方法
- HackReactor,编码窗口现在可以访问一个名为“”的对象;招生;使用名为“;showApp”;.调用此方法时不带任
- 如何在下一次 AJAX 调用中访问从一个 AJAX 调用返回的变量
- 如何在循环期间访问 jquery getJson 调用 ($.getJson) 中的索引变量
- .load() 事件在 SVG 完成加载后未被调用/无法访问其内容
- 对方法或属性访问的意外调用
- 授权客户端JS API调用Google'的具有现有访问令牌的gap库
- 当访问文件时,我可以自动调用例程或函数吗
- 从 AJAX 调用访问嵌套的 JSON 数据
- 通过flask中的ajax调用访问龙卷风中的cookie
- 在MVC应用程序中使用DataTables.NET ajax调用访问WebAPI 2 json
- 不能在Javascript中使用调用访问变量
- 从异步调用访问成员方法
- 如何从Javascript调用访问伪元素样式
- 对通过ajax调用访问的JSP页面进行分区
- 如何从函数本身之外的ajax调用访问数据