只是有點回答我自己的問題。由於我已經計劃使用Web組件,因此我發現attachedCallback
完全符合我的要求。
最後,我發現createdCallback
和attachedCallback
之間的實際用例差異。
比方說,你有:
<div>
<my-element id="a"></my-element>
<my-element id="b"></my-element>
</div>
然後運行:
var a = document.getElementById("a");
a.parentNode.appendChild(a);
這將移動#a
到最後,產生這樣的:
<div>
<my-element id="b"></my-element>
<my-element id="a"></my-element>
</div>
最關鍵的是,當appendChild
被調用(和,我假設,insertBefore
,和所有th e移動節點的其他功能),my-element
將首先觸發detachedCallback
,然後觸發attachedCallback
。因此,如果包括在attachedCallback
,以確定其位置的代碼:
myElementPrototype.attachedCallback = function() {
var myPosition = [].slice.call(this.parentNode.children).indexOf(this);
}
那麼它會被再次確定無論身在何處的元素被移動。這應該與React等虛擬DOM API兼容。
至於如何做到這一點沒有網頁組件,那麼我想答案是做任何document-register-element不會填寫attachedCallback
和detachedCallback
。快速瀏覽看起來像是MutationObservers的東西,相當複雜。
'nth-child'是什麼?似乎有更好的方法來做你想做的事情。你想要構建什麼樣的佈局? – mattsven
父元素的'nnth-child'。我實際上想要構建的是一種佈局,它根據它們在標記中出現的順序以一種複雜的方式「轉換」某些Web組件,但我簡化它只是爲了提出這個問題。 – Zacqary