Thanks in advance for any help! I'm trying to do some recursive span tag "replaceWith" actions, replacing the span with a div and 3 child spans. I was having a huge problem with my child object(containing the spans to be replaced) being updated somehow when the first span is replaced (causing my object to grow by 2 every time), so I figured I'd try to make the object constant and then freeze or seal it. I'm not sure if that is the correct way to do this but I'm not a good enough javascript programmer to know. Anyway, I get my spans object this way:
let el = document.getElementById("container");
let nodes = el.children[0];
Object.seal(nodes);//THIS SEALS/FREEZES JUST FINE
let spans = {};//TRIED WITH AND W/O THIS JUST TO MAKE SURE THE OBJECT WAS CREATED
const spans = nodes.children;
console.log('type of spans: '+typeof spans);//RETURNS object
console.log('spans length: '+spans.length);//RETURNS spans length: 3
console.log('spans: '+JSON.stringify(spans));//RETURNS spans: {"0":{},"1":{},"2":{}}
Object.seal(spans);///RETURNS Uncaught TypeError: Cannot Seal
The HTML is simple:
<body>
<button id="fractalize">Fractalize</button>
<br/>
<br/>
<div id="container">
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
</div>
</body>
spans returns as an object and everything but it keeps failing when using Object.freeze or Object.seal! I need to know if someone can tell me what I am doing wrong.. the spans object doesn't look any different to me than the nodes object and the nodes object freezes/seals just fine. If I can get those objects frozen then my plan is to do the following for the replacements:
for( let key in spans ) {
if( spans.hasOwnProperty(key) ) {
console.log(key + " -> " + JSON.stringify(spans[key]));
let nDiv = document.createElement("div");
nDiv.className="sierpinski";
nDiv.innerHTML="<span></span><span></span><span></span>";
spans[key].replaceWith(nDiv.cloneNode(true));
nDiv.remove();
}
}
Thanks for any insight!
edit For insight, this is what I want;
<body>
<button id="fractalize">Fractalize</button>
<br/>
<br/>
<div id="container">
<div class="sierpinski">
<div class="sierpinski">
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
</div>
<div class="sierpinski">
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
</div>
<div class="sierpinski">
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
</div>
</div>
</div>
</body>
And this is what I'm currently getting;
<body>
<button id="fractalize">Fractalize</button>
<br/>
<br/>
<div id="container">
<div class="sierpinski">
<div class="sierpinski">
<span></span>
<div class="sierpinski">
<span></span>
<div class="sierpinski">
<span></span>
<div class="sierpinski">
<span></span>
<span></span>
<span></span>
</div>
<span></span>
</div>
<span></span>
</div>
<span></span>
</div>
<span></span>
<span></span>
</div>
</div>
</body>