2020-08-08 11:37:17
在JavaScript中,添加元素主要通过创建元素、设置内容与属性、插入DOM实现;删除元素则可通过现代element.remove()或传统parentNode.removeChild()方法完成。 以下从添加与删除的具体方法、高效安全操作要点、实际项目注意事项三方面展开说明:
一、添加元素的方法文本内容:优先用textContent(安全处理纯文本)或innerText,避免XSS风险。
newDiv.textContent = '纯文本内容';HTML结构:若需插入HTML,用innerHTML(需净化用户输入以防XSS)。
newDiv.innerHTML = '<span>带标签的内容</span>';属性设置:通过element.id、element.classList.add()或setAttribute()添加ID、类名或其他属性。
newDiv.id = 'dynamic-div';newDiv.classList.add('highlight');newDiv.setAttribute('data-role', 'banner');末尾追加:parentNode.appendChild(childElement)将元素添加到父容器末尾。
const container = document.getElementById('container');container.appendChild(newDiv);指定位置插入:parentNode.insertBefore(newElement, referenceElement)将新元素插入到参考元素前。
const reference = document.getElementById('ref-item');reference.parentNode.insertBefore(newDiv, reference);灵活位置插入:element.insertAdjacentHTML(position, text)或insertAdjacentElement(position, element)支持在目标元素的beforebegin(前)、afterbegin(内部开头)、beforeend(内部末尾)、afterend(后)四个位置插入内容。
const target = document.getElementById('target');target.insertAdjacentHTML('beforebegin', '<p>插入到目标前</p>');使用DocumentFragment:将多个元素先添加到文档片段中,再一次性插入DOM,减少重排和重绘次数。
const fragment = document.createDocumentFragment();for (let i = 0; i < 100; i++) { const item = document.createElement('li'); item.textContent = `Item ${i}`; fragment.appendChild(item);}document.getElementById('list').appendChild(fragment);脱离文档流操作:临时移除元素,修改后重新插入,减少重排次数。
const element = document.getElementById('element');element.parentNode.removeChild(element); // 移除// 修改元素...document.body.appendChild(element); // 重新插入防范XSS攻击:优先用textContent处理用户输入,若需插入HTML,使用专业库(如DOMPurify)净化内容。
const userInput = '<script>alert("XSS")</script>';const safeDiv = document.createElement('div');safeDiv.textContent = userInput; // 安全处理手动解绑事件监听器:移除元素前,调用element.removeEventListener()解除绑定。
function handleClick() { console.log('Clicked'); }const button = document.getElementById('btn');button.addEventListener('click', handleClick);// 移除前解绑button.removeEventListener('click', handleClick);button.remove();采用事件委托:将事件监听器绑定到父元素,减少子元素移除时的内存泄漏风险。
document.getElementById('parent-list').addEventListener('click', (e) => { if (e.target.tagName === 'LI') { console.log('List item clicked:', e.target.textContent); }});