至少對我來說,你的問題是不清楚的準確您正在嘗試做的,或者得到什麼。
最直接等同於::before
和::after
:
如果你想真正插入內容,這是什麼::before
和::after
CSS選擇這樣做,那麼最直接的等價物是Element.insertAdjacentHTML(position, text)
。在這種情況下:
的::before
等效是:
Element.insertAdjacentHTML("beforebegin", "<p>Additional HTML content before element.</p>");
的::after
等效是:
Element.insertAdjacentHTML("afterend", "<p>Additional HTML content after element.</p>");
Element.insertAdjacentHTML()
也有剛剛插入HTML文本的afterbegin
和beforeend
選項在引用的Element的開始之後或僅在結束之前。
交替:
你可以使用Node.insertBefore(newNode, referenceNode)
插入節點。
對於::before
這將是(MYNODE前插入newNode
):
myNode.parentNode.insertBefore(newNode, myNode);
對於::after
這將是(MYNODE後插入newNode
):
myNode.parentNode.insertBefore(newNode, myNode.nextSibling);
獲取引用:
如果你是嘗試獲取DOM中較早的元素的引用,那麼這聽起來像您正在尋找Node.previousSibling
。如果您正在尋找DOM後面的元素的引用,那麼您正在尋找Node.nextSibling
。
在DOM走順序:
它也有可能是你正在尋找的,只是之前和剛剛在DOM walk order參考Node後的元素。然而,這是而不是真的是CSS選擇器::before
和::after
做什麼。但是,從您提到的Page Inspector,這聽起來像這是你想要的。如果是這樣,那麼您可以使用TreeWalker來漫遊DOM樹。
以下應該做你想要的東西(注:目前未經測試,因此可能失去了一些東西。):
//referenceNode is the node for which we want to find the elements
// before and after in DOM walk order.
//Create the TreeWalker
let treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT,
{acceptNode: function(node) {
return NodeFilter.FILTER_ACCEPT;
}
},
false);
//Point the TreeWalker at the referenceNode.
treeWalker.currentNode = referenceNode;
//Get the node immediately prior to the referenceNode in DOM walk order
let thePreviousNode = treeWalker.previousNode();
//Point the TreeWalker back at the referenceNode.
treeWalker.currentNode = referenceNode;
//Get the node immediately after to the referenceNode in DOM walk order
let theNextNode = treeWalker.nextNode();
正如Nickolay提到的,如果你想充分細節頁面檢查,或DOM Inspector (documentation),然後您需要使用inIDeepTreeWalker。但是,您不希望或需要使用Firefox特定非標準接口提供的詳細信息。如果你想要了解XUL <toolbarbutton>
是如何構建的(不是屬性/屬性,而是構成像<toolbarbutton>
這樣的XUL元素的XBL),您只需要它。對於絕大多數您可能想到的內容,標準的TreeWalker應該沒問題。
除inIDeepTreeWalker
以外,以上所有內容都是JavaScript的標準部分,不需要提升特權(即不需要使用附加組件)。
請澄清你的問題。目前尚不清楚*究竟*你想要什麼。也許描述你正在嘗試做什麼。你想插入當前節點的':: before'和':: after'內容(這是CSS選擇器':: before'和':: after')嗎?或者,您是否試圖走過您在[頁面檢查器](https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector)中可視化表示的DOM樹? – Makyen
是的,我想通過編程方式通過dom時看到*所有*節點。 – NoBugs
所以......你的問題仍然不清楚。您是否試圖訪問'content',該內容是使用CSS':: before'&':: after'添加的,或者您是否嘗試遍歷DOM樹,以訪問先前或晚些時候的元素/節點比當前元素?我想讓我感到困惑的是,當這個「content」既不是元素也不是節點時,它一直在調用':: before'和':: after''content''節點和'元素',它們是僞元素不是DOM中的元素。這與您使用的標籤相結合,使您對我的問題不清楚。 – Makyen