const newDiv = document.createElement('div');
newDiv.textContent = '我是新來的div';
newDiv.style.backgroundColor = 'lightblue';
newDiv.style.padding = '10px';
createElement
方法接收一個參數, 就是你要創建的 HTML 標簽名. 創建后, 這個元素還不會立即出現在頁面上, 它只是存在于內存中, 等著被添加到 DOM 樹中.const textNode = document.createTextNode('這是一段純文本內容');
newDiv.appendChild(textNode);
雖然現在大多數情況下我們直接用textContent
或innerText
就夠了, 但在某些特殊場景下 createTextNode
還是很有用的.創建好節點后, 我們需要把它們放到頁面中才能看到效果:添加到末尾, 這是最常用的方法 , 把節點添加到指定父節點的子節點列表末尾:
const container = document.getElementById('container');
container.appendChild(newDiv);
如果你把一個已存在于文檔中的節點 append 到另一個位置, 它會被從原來的位置移動, 而不會被復制.在指定位置插入, 如果你想控制新節點的位置 , 而不是總是添加到末尾, 可以使用 insertBefore:
const newParagraph = document.createElement('p');
newParagraph.textContent = '我在中間';
const firstChild = container.firstChild;
container.insertBefore(newParagraph, firstChild);
insertBefore
接收兩個參數: 要插入的節點和參考節點.新節點會被插入到參考節點之前.
更靈活的插入,這組方法提供了更多插入位置的選擇:
const targetElement = document.getElementById('target');
targetElement.insertAdjacentHTML('beforebegin', '<div>beforebegin - 在元素前面</div>');
targetElement.insertAdjacentHTML('afterbegin', '<div>afterbegin - 在元素內部開頭</div>');
targetElement.insertAdjacentHTML('beforeend', '<div>beforeend - 在元素內部末尾</div>');
targetElement.insertAdjacentHTML('afterend', '<div>afterend - 在元素后面</div>');
三、修改節點, 創建和添加節點后, 我們經常需要修改它們const link = document.createElement('a');
link.href = 'https://www.example.com';
link.title = '示例網站';
link.setAttribute('data-custom', 'value');
link.style.color = 'red';
link.style.textDecoration = 'none';
link.innerHTML = '<strong>點擊我</strong>';
link.textContent = '安全的文本內容';
link.innerHTML += ' (追加的內容)';
const newHeading = document.createElement('h2');
newHeading.textContent = '新的標題';
const oldHeading = document.getElementById('old-heading');
const parent = oldHeading.parentNode;
parent.replaceChild(newHeading, oldHeading);
const original = document.getElementById('original');
const shallowClone = original.cloneNode(false);
const deepClone = original.cloneNode(true);
document.body.appendChild(deepClone);
cloneNode
默認不會復制事件監聽器,但會復制屬性(包括像 onclick
這樣的內聯事件處理器).const parent = document.getElementById('parent');
const child = document.getElementById('child-to-remove');
parent.removeChild(child);
const elementToRemove = document.getElementById('remove-me');
elementToRemove.remove();
3) DocumentFragment, 批量操作優化:當你需要添加多個節點時,頻繁操作 DOM 會導致性能問題.這時可以使用 DocumentFragment:
const fragment = document.createDocumentFragment();
for (let i = 0; i < 100; i++) {
const newItem = document.createElement('li');
newItem.textContent = `項目 ${i}`;
fragment.appendChild(newItem);
}
document.getElementById('list').appendChild(fragment);
五、我們來看一個完整的例子, 結合上面講的各種方法
function addComment(name, text) {
const fragment = document.createDocumentFragment();
const commentDiv = document.createElement('div');
commentDiv.className = 'comment';
const nameHeading = document.createElement('h3');
nameHeading.textContent = name;
const textParagraph = document.createElement('p');
textParagraph.textContent = text;
const deleteButton = document.createElement('button');
deleteButton.textContent = '刪除';
deleteButton.className = 'delete-btn';
commentDiv.appendChild(nameHeading);
commentDiv.appendChild(textParagraph);
commentDiv.appendChild(deleteButton);
fragment.appendChild(commentDiv);
const commentsContainer = document.getElementById('comments');
if (commentsContainer.firstChild) {
commentsContainer.insertBefore(fragment, commentsContainer.firstChild);
} else {
commentsContainer.appendChild(fragment);
}
}
document.getElementById('comments').addEventListener('click', function(e) {
if (e.target.classList.contains('delete-btn')) {
const comment = e.target.closest('.comment');
comment.remove();
}
});
addComment('張三', '這篇文章太棒了!');
addComment('李四', '學到了很多新知識!');
閱讀原文:原文鏈接
該文章在 2025/7/7 9:35:50 編輯過