2016-03-06 63 views
3

我正在处理多个函数将各种事件监听器添加到最初隐藏的div的事情,我们只需将其称为secretBlock。只有一个将永远是活跃在任何给定的点,但都表示职能将由操纵它:Javascript无法在克隆后取消隐藏元素?

  • 首先克隆sercetBlock,以确保没有以前的听众仍然会附加
  • 然后将显示设置为flex

HTML:

<div id="secretBlock" hidden>Secret</div> 

的JavaScript:

function exampleFuction() { 
    var secretBlock = document.getElementById('secretBlock'); 
    var secretClone = secretBlock.cloneNode(true); 
    secretBlock.parentNode.replaceChild(secretClone, secretBlock); 
    secretBlock.style.display = 'flex'; 
    .... 
} 

但设置显示器的最后一部分未触发。

我以为这已经是与异步的烦躁,但

setTimeout(function(){ secretBlock.style.display = 'flex' }, 999); 

也没有效果。

然而,其中一个功能设置显示,使其正确火灾后追加的另一个DIV权在div:

secretBlock.parentNode.replaceChild(secretClone, secretBlock); 
secretBlock.style.display = 'flex'; 
otherDiv.appendChild(secretBlock); 

位的测试之后,我发现它不”不管什么时候我设置显示器(现在或以后)或代码中的位置,只要secretBlock被附加到另一个div,显示器的改变将被注册,否则保持隐藏状态。

.......这八九不离十留给我无能,这是怎么回事,任何有识之士将因此非常感谢~~

+1

它不是隐藏的,它不是文档的一部分,因为您从文档中删除了secretBlock:'secretBlock.parentNode.replaceChild(secretClone,secretBlock);' –

+0

@ Dr.Molle我在那之后添加了一个返回检查,但铬说,它仍然存在?虽然元素闪现暗示着一个变化。 – House3272

回答

-1

当时参考的问题。
.replaceChild()后替换secretBlock,初始参考:

var secretBlock = document.getElementById('secretBlock') 

变得过时,因为它仍然指向这是不分开的html文件的再老,原始的元素。因此,你需要参考重定向到克隆的元素:

secretBlock.parentNode.replaceChild(secretClone, secretBlock); 
secretBlock = document.getElementById('secretBlock'); 
secretBlock.style.display = 'flex'; 

感谢Dr.Molle