javascript - this.nextChild 未定义 - mouseover/mouseout

标签 javascript undefined parent-child mouseover mouseout

我是一名学生,仍在学习中,如果这是一个愚蠢的问题,我深表歉意。通常我可以通过在这里筛选其他问题来解决这个问题,但这次我似乎被卡住了。

我只是想做一个简单的鼠标悬停/鼠标移开,当您将鼠标悬停在图像上时,图像消失并且 anchor 标记中的文本更改为链接的名称(即,将鼠标悬停在房屋图标上并它消失并被“HOME”取代)。我让那部分工作正常,但是当鼠标离开链接时我无法让它切换回图标。这是链接的当前 HTML:

<li class="linksLi">
   <a id="#homeLink" data-namesrc="HOME" class="linksA">
      <img src="img/home.svg" alt="Home Icon" class="links">
   </a>
</li>

然后是javascript:

var linksImg = document.querySelectorAll(".links");
var linksName = document.querySelectorAll(".linksA");

function changeImg() {
    this.classList.add("hide");
    this.parentElement.innerHTML = this.parentElement.dataset.namesrc;  
}   

function changeName() {
    this.innerHTML = "";
    this.nextChild.classList.remove("hide");    
}


for (var i=0;i<linksImg.length;i++) {
    linksImg[i].addEventListener("mouseover", changeImg, false);
}

for (var j=0;j<linksName.length;j++) {
    linksName[j].addEventListener("mouseleave", changeName, false);
}

changeImg()附加到img标签,changeName()附加到anchor标签。但我的问题出在 changeName() 中,当我尝试从子项中删除“隐藏”类时,它告诉我该子项未定义(即使 img 标签显然位于 HTML 中的 a 标签内)。我已经看到很多关于节点和空白的东西,但我并不完全理解,所以我不知道这是否是问题所在?也许这是一个非常基本的问题,我遗漏了一些非常明显的东西,我不知道,但我们将不胜感激任何帮助!

请仅使用 JAVASCRIPT,不要使用 jQuery!

最佳答案

尝试将事件作为函数的参数并使用“event.target”而不是“this”

function changeImg(evt) {
    evt.target.classList.add("hide");
    evt.target.parentElement.innerHTML = evt.target.parentElement.dataset.namesrc;  
}  

“this”在 JavaScript 中是一个棘手的关键字,它可以是很多东西,具体取决于函数的调用方式。

还有一个 JSFiddle给你。

编辑 我已经更新了 JSFiddle 以添加/删除跨度而不是设置 innerHTML。

关于javascript - this.nextChild 未定义 - mouseover/mouseout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784532/

相关文章:

javascript - 触发事件的文本字段上的 Selenium,一种模仿人类交互的方式

javascript - 提交 AjaxForm 时识别特定按钮

javascript - JS : Why isn't this variable available to the other functions?

javascript - 为什么 typeof array[0] == 'undefined' 不起作用?

java - Java中是否可以在父类中为子类赋值?

javascript - 没有包装器的嵌套 ngRepeat

javascript - 如何在循环中对一堆查询进行排序?

javascript - 在 JavaScript 中将对象的未定义键设置为未定义

linux - 通过 fork : unexplainable behaviour 创建进程和子进程

gradle - 是否可以有一个远程 gradle.properties 文件