最近完成一个小功能,需要用js操作iframe标签中引入的SVG中的DOM,网上找了好多实例,总是获取不到iframe中的DOM,网上无意中看到一个方法,发现原来iframe中引入的SVG只有在加载完成后才可被获取,现在将代码贴出来,供需要的朋友参考一下。
JS代码
/*获取iframe中引入的svgDom时,必须等到iframe加载完成后,
才可通过document.getElementById('iframe').contentDocument获取svgDom,否则获取失败*/
var frameObj= document.getElementById('svgframe');
if (frameObj.attachEvent) {
frameObj.attachEvent('onload', function () {
alert('iframe is loaded')
})
} else {
frameObj.onload = function () {
//这里获取svgDom
var iframeSvg = document.getElementById('svgframe').contentDocument;
//接下来就可以对svgDom进行操作,绑定元素点击事件,改变元素的属性等等
//重新设置SVG文档中id为ZB_SXIc的text的值
var txtObj = iframeSvg.getElementById("ZB_SXIc");
txtObj.textContent = "test"
}
}
HTML代码
<div class="pull-right" >
<div class="panel">
<div class="panel-body">
<iframe id="svgframe" src="#" width="100%" height="768px"></iframe>
</div>
</div>
</div>
结语
如果是object或者embed标签引入的文档,只需改变SVG对象的或者方式即可
var svgObject = document.getElementById('object').contentDocument;
var svgIframe = document.getElementById('iframe').contentDocument;
var svgEmbed = document.getElementById('embed').getSVGDocument();
第一次发帖,水平粗糙,希望能给予需要的人帮助,毕竟自己在这个论坛受益颇多。