加载HTML对象一次并多次使用

时间:2015-02-22 22:40:12

标签: javascript html

我尝试多次将单个SVG文件作为HTML Object标记加载,并且我使用JavaScript编写负责放置对象的HTML。但是,每次JavaScript写入页面时,Object都会加载一个单独的副本。

有没有办法加载一次,然后多次引用该副本?

这是我正在做的事情的一个例子(假设在加载div之后调用javascript。):



(function(){
  var foo = document.getElementById("foo");
  var numberOfElements = 10;
  for(var i = 0; i < numberOfElements; i++){
    foo.innerHTML +=
            "<object height=\"10px\" width=\"10px\" data=\"someSVG.svg\"></object>";
  }
}())
&#13;
<html>
  <head>
    <title>Title</title>
  </head>
  <body>
    <div id="foo">
    </div>
  </body>
</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

只需一次添加所有HTML代码即可。 否则你告诉浏览器10次,DOM中有变化,它开始验证,引用并立即呈现它。 希望这将使用'someSVG.svg'的浏览器文件缓存

(function() {
  var foo = document.getElementById("foo");
  var numberOfElements = 10;
  var content = ""; // temporary string, starting empty
  for (var i = 0; i < numberOfElements; i++) {
    content += 
      '<object height="10px" width="10px" data="http://www.webmasterpro.de/coding/article/svg.html/image/600px-SVG-Logo2.svg.png/scale/100x150/"></object>';
  }
  foo.innerHTML += content; // append once, outside of loop
}())
<div id="foo"></div>

答案 1 :(得分:0)

似乎是因为元素而发生的。 如果你切换到一个,也可以处理SVG。它就像一个魅力,并使用缓存的src。

你能吗?

   foo.innerHTML += '<img height="10px" width="10px" src="http://upload.wikimedia.org/wikipedia/en/2/24/WWF_logo.svg"/>'

请参阅此代码段:

(function() {
  var foo = document.getElementById("foo");
  var numberOfElements = 10;
  var content = ""; // temporary string, starting empty
  content +=
    '<img height="10px" width="10px" src="http://upload.wikimedia.org/wikipedia/en/2/24/WWF_logo.svg"/>';
  foo.innerHTML += content; // append once, outside of loop
  var element = document.querySelector('#foo img');
  for (var i = 0; i < numberOfElements; i++) {
    foo.appendChild(element.cloneNode(true));
  }
}())
<div id="foo"></div>