【问题标题】:Store the inner html of the sibling of the targeted element存储目标元素兄弟的内部 html
【发布时间】:2020-07-11 06:22:24
【问题描述】:

我有一个代码,但我无法让它工作。 一个目标出现在一个元素上,我必须找到它的下一个兄弟,或者我可以转到它的父元素,然后使用 queryselector 搜索兄弟的类。

如果我将 ** 行 ** 替换为查询选择器,代码就可以完美运行,所以问题在于兄弟方法 100%。

你知道我做错了什么吗?

/*we put on event listener for each "refsz" class*/
var elements = document.getElementsByClassName("refsz");

for (var z = 0; z < elements.length; z++) {
    elements[z].addEventListener('click', callThis, false);
}

/*and when the event occurs, I select the sibling div's innerHTML and change
"success" div's innerHTML to this*/

function callThis() {

**var temp= event.target.nextSibling.innerHTML;**
document.querySelector("#success").innerHTML = temp;
}

<div class="parent">

<div> class="refsz"> I will click this </div>
<div> class="sibling"> I need the innerHTML of this sibling</div>

</div>

<div id="success"></div>

【问题讨论】:

  • var text= event.target.parentElement.querySelector(".ClassOf").innerHTML; 在函数之外没有意义
  • 显示实际代码以及.ClassOf 是什么,因为它与您的示例 html 不匹配
  • 抱歉,已编辑!感谢您的反馈!
  • callThis函数需要event参数
  • 不,没有那个参数也可以。唯一不工作的兄弟部分:(

标签: javascript html css


【解决方案1】:

您宁愿调用函数nextElementSibling 而不是nextSibling

W3schools的解释:

nextElementSibling 属性返回紧跟在指定元素之后的元素,在同一树级别。

该属性与nextSibling的区别在于,nextSibling将下一个兄弟节点作为元素节点、文本节点或注释节点返回,而nextElementSibling将下一个兄弟节点作为元素节点返回(忽略文本和注释节点) .

更多here.

来自MDN的解释:

NonDocumentTypeChildNode.nextElementSibling 只读属性返回其父子列表中紧跟指定元素的元素,如果指定元素是列表中的最后一个元素,则返回 null。

更多here.

您还可以详细了解nextSiblingnextElementSibling here 之间的区别。


其他错误:
  • 您的 div 没有在其标签中包含 class 属性
  • 在函数callThis() 内部,您应该调用this.nextElementSibling 而不是this.event.nextSibling
  • 您也可以使用document.getElementById("success") 代替document.querySelector("#success"),因为您知道元素的ID

这是更正后的代码:

/*we put on event listener for each "refsz" class*/
var elements = document.getElementsByClassName("refsz");

for(var z=0; z < elements.length; z++) {
  elements[z].addEventListener('click', callThis, false);
}

/*and when the event occurs, I select the sibling div's innerHTML and change
"success" div's innerHTML to this*/

function callThis() {
  var temp= this.nextElementSibling.innerHTML;
  document.getElementById("success").innerHTML = temp;
}
<div class="parent">
  <div class="refsz"> I will click this </div>
  <div class="sibling"> I need the innerHTML of this sibling</div>
</div>

<div id="success"></div>

【讨论】:

  • 伊万你太棒了!这一行“var temp=this.nextElementSibling.innerHTML;”解决了一切!非常感谢您的帮助,我无法告诉您您让我多么高兴!你太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
相关资源
最近更新 更多