2011-10-20 56 views
2

我想嵌入并显示一个Flash文件。它适用于document.write,但是当我尝试使用AppendChild(文本)时,它不会显示Flash,而是显示纯文本。用什么DOM方法代替?document.write和DOM element.AppendChild之间的Javascript差异

<html> 
    <head> 
<script> 
    function addText(text,elementId){ 
    if (document.createTextNode){ 
     var mytextNode=document.createTextNode(text) 
     document.getElementById(elementId).appendChild(mytextNode) 
    } 
    } 

    </script> 

    </head> 

    <body> 

       <div id="test"> 

       </div> 

    <script> 
     addText("<embed height='100' width='100' type='application/x-shockwave-flash' allowscriptaccess='always' wmode='transparent' quality='high' swliveconnect='true' name='test' id='test' src='test.swf'>",'test'); 
    </script>  
    </body></html> 
+0

您是不是想要使用'.innerHTML'? –

+0

我想你想要document.createElement()来代替。 –

+0

这可能有助于http://stackoverflow.com/questions/367214/document-write-vs-inserting-dom-nodes-preserve-form-information –

回答

2
(function() { 
    var myEmbed = document.createElement("embed"); 
    myEmbed.type="application/x-shockwave-flash"; 
    myEmbed.height='100'; 
    myEmbed.width='100'; 
    … 
    document.getElementById("test").appendChild(myEmbed); 
}()); 

乍一看这样的做法往往显得不必要的嘈杂和不值钱,但它与HTML的自然的语法更加集成三立。如果你希望能够写HTML直接插入到文档中,你可能会像jQuery框架,它允许更快乐的语法,如:

$("<embed src='…'/>") 

不过,如果你只是在做这一切嵌入Flash,使用swfobject

+0

两个答案都很好,我认为你是因为你的积分较少;) – user310291

+0

哈哈,这是一个有趣的原因。我会给@alex一个+1来帮助保持平衡。 :P – kojiro

2

因为您正在创建一个文本节点,而不是序列化的HTML。

你可以改变的功能...

function addHTML(html, elementId) { 
    if (document.createElement) { 

     var holder = document.createElement('div'); 

     holder.innerHTML = html; 

     var target = document.getElementById(elementId); 

     while (holder.hasChildNodes()) { 
      target.appendChild(holder.firstChild); 
     } 
    } 
} 

jsFiddle

+0

非常感谢你这是不幸的,不能检查2个很好的答案。 – user310291