如何使用removeChild清除页面createElement动态生成的p元素
问题原因
removeChild()方法要求传入实际的DOM节点对象,你直接传入ID字符串"createditginfo"不符合参数要求,无法执行删除操作- 循环内给所有动态生成的
<p>元素都设置了相同的id="createditginfo",HTML规范要求id在文档内必须唯一,重复id会导致DOM选择逻辑异常 - 即使修复了
removeChild()的传参问题,也只能删除第一个匹配id的<p>元素,之前多次搜索生成的其他<p>元素依然会残留在容器中
解决方案
方案1:直接清空结果容器(最简便,推荐)
如果你的span.ms-font-mitglue容器内只用来放搜索结果,没有其他需要保留的固定内容,直接清空容器的所有内容即可,修改成本极低。
只需要删除原来的try-catch删除逻辑,新增一行output.innerHTML = ''即可,修改后的完整代码如下:
async function parseitglinkquery() { var queriedresults = await getitglinkquery(); console.log(queriedresults); const output = document.querySelector('span.ms-font-mitglue'); // 直接清空容器内所有原有内容 output.innerHTML = ''; for (let i = 0; i < queriedresults.length; i++) { // 可选优化:直接取属性值不需要JSON.stringify,避免生成的内容带多余引号 let attr = queriedresults[i]["data"]["attributes"]; let text = "Company: " + attr["organization-name"] + "<br>"+ "Name: " + attr.name + "<br>" + "Username: " + attr.username.replace("\\","") + "<br>" + "Password: " + attr.password; let pre = document.createElement('p'); // 注意:id不能重复,建议改成class,不需要选择单个元素也可以删掉id设置 pre.setAttribute("class", "createditginfo") pre.innerHTML = text; pre.style.cssText += 'font-size:24px;font-weight:bold;'; output.appendChild(pre); console.log(typeof pre) } }
方案2:仅删除动态生成的
元素(适合容器有其他固定内容的场景)
如果结果容器内还有其他需要保留的固定内容,就专门筛选出你之前生成的<p>元素删除即可,需要先把原来的id改成class避免重复:
async function parseitglinkquery() { var queriedresults = await getitglinkquery(); console.log(queriedresults); const output = document.querySelector('span.ms-font-mitglue'); // 选中所有之前生成的p元素,逐个删除 document.querySelectorAll('.createditginfo').forEach(el => el.remove()); for (let i = 0; i < queriedresults.length; i++) { let attr = queriedresults[i]["data"]["attributes"]; let text = "Company: " + attr["organization-name"] + "<br>"+ "Name: " + attr.name + "<br>" + "Username: " + attr.username.replace("\\","") + "<br>" + "Password: " + attr.password; let pre = document.createElement('p'); pre.setAttribute("class", "createditginfo") pre.innerHTML = text; pre.style.cssText += 'font-size:24px;font-weight:bold;'; output.appendChild(pre); console.log(typeof pre) } }
内容的提问来源于stack exchange,提问作者user16660683
相关产品推荐
相关产品推荐

