点击事件触发时目标元素未创建的问题排查求助
问题分析与修复
你的代码里有两处关键语法错误,直接导致新元素无法被创建并挂载到页面:
appendChild 方法调用语法错误
原代码中错误地使用了属性访问的写法:displayedItemWrapper.appendChild.displayedItemContainer;正确写法是将元素作为参数传入
appendChild方法:displayedItemWrapper.appendChild(displayedItemContainer);错误地将容器挂载到自身
原代码最后一行不仅语法错误,还试图把容器元素挂载到自己身上:displayedItemImgContainer.appendChild.displayedItemImgContainer;正确逻辑是挂载之前创建好的图片元素:
displayedItemImgContainer.appendChild(displayedItemImg);
另外还有两个可选优化点(不影响功能但提升代码健壮性):
- 修正变量名拼写错误:比如
hiddednItemWeapon应改为hiddenItemWeapon - 避免使用
childNodes获取元素:childNodes会包含换行、空格这类文本节点,容易导致元素获取失败,建议改用querySelector或children,例如把hiddenItem.childNodes[2].childNodes[0].innerHTML替换为hiddenItem.querySelector('.weapon-text').innerHTML(需根据实际DOM结构调整选择器)
修复后的核心代码片段:
if(hideItem.includes('grid-item')){ hiddenItem.style.display = 'none'; let hiddenItemWeapon = hiddenItem.childNodes[2].childNodes[0].innerHTML; let hiddenItemCondition = hiddenItem.childNodes[0].childNodes[0].innerHTML; let hiddenItemImg = hiddenItem.childNodes[1].childNodes[0].src; let hiddenItemWeaponName = hiddenItem.childNodes[2].childNodes[1].innerHTML; let hiddenItemWeaponPrice = hiddenItem.childNodes[2].childNodes[2].innerHTML; let displayedItemContainer = document.createElement('div'); displayedItemContainer.className = 'selected-item-container'; let displayedItemImgContainer = document.createElement('div'); displayedItemImgContainer.className = 'selected-item-img-container'; let displayedItemImg = document.createElement('img'); displayedItemImg.src = hiddenItemImg; // 修正后的挂载逻辑 displayedItemWrapper.appendChild(displayedItemContainer); displayedItemContainer.appendChild(displayedItemImgContainer); displayedItemImgContainer.appendChild(displayedItemImg); }
内容的提问来源于stack exchange,提问作者LostInTheCSSauce
相关产品推荐
相关产品推荐

