admin管理员组文章数量:1293564
In the below code,
<!DOCTYPE html>
<html>
<head>
<title>Hide odd rows</title>
<meta charset="UTF-8">
</head>
<body>
<div style="background-color:#8F9779;width:200px;height:30px;">
</div>
<hr style="width:200px" align="left">
<table border="1" >
<tr class="hide" >
<td width="40" height="20">row 1</td>
</tr>
<tr>
<td width="40" height="20">row 2</td>
</tr>
<tr class="hide">
<td width="40" height="20">row 3</td>
</tr>
<tr>
<td width="40" height="20">row 4</td>
</tr>
<tr class="hide">
<td width="40" height="20">row 5</td>
</tr>
</table><br>
<button type="button" name="HideRows">Hide Odd Rows</button>
<script type="text/javascript" src="hideOddRows.js"></script>
</body>
</html>
/* hideOddRows.js */
document.querySelector('[name=HideRows]').onclick = hideRows;
function hideRows(){
var elements = document.getElementsByClassName('hide');
elements.forEach(function(element){
element.style.visibility = "hidden";
});
return true;
}
As per debugging, callback function for each element
of elements
array is not executing on click event.
I consider elements
as keyed collection, as shown below..
--
How to resolve this error?
In the below code,
<!DOCTYPE html>
<html>
<head>
<title>Hide odd rows</title>
<meta charset="UTF-8">
</head>
<body>
<div style="background-color:#8F9779;width:200px;height:30px;">
</div>
<hr style="width:200px" align="left">
<table border="1" >
<tr class="hide" >
<td width="40" height="20">row 1</td>
</tr>
<tr>
<td width="40" height="20">row 2</td>
</tr>
<tr class="hide">
<td width="40" height="20">row 3</td>
</tr>
<tr>
<td width="40" height="20">row 4</td>
</tr>
<tr class="hide">
<td width="40" height="20">row 5</td>
</tr>
</table><br>
<button type="button" name="HideRows">Hide Odd Rows</button>
<script type="text/javascript" src="hideOddRows.js"></script>
</body>
</html>
/* hideOddRows.js */
document.querySelector('[name=HideRows]').onclick = hideRows;
function hideRows(){
var elements = document.getElementsByClassName('hide');
elements.forEach(function(element){
element.style.visibility = "hidden";
});
return true;
}
As per debugging, callback function for each element
of elements
array is not executing on click event.
I consider elements
as keyed collection, as shown below..
--
How to resolve this error?
Share edited Dec 16, 2015 at 5:52 overexchange asked Dec 16, 2015 at 4:10 overexchangeoverexchange 1 1-
elements
hasnodelist
andforEach
does not work withnodelist
. Try[].forEach.call(elements,function(item){});
– Rayon Commented Dec 16, 2015 at 4:11
4 Answers
Reset to default 9forEach
is not included in the prototype of the array-like HTMLCollection
object returned by getElementsByClassName
.
An HTMLCollection
instance is array-like, in that you can access elements by indexes, but it does not include all of the methods of an array, as you have discovered with forEach
.
You can however manually call the method on the object by accessing the method from the Array
prototype.
var elements = document.getElementsByClassName('hide');
Array.prototype.forEach.call(elements, function(element){
element.style.visibility = "hidden";
});
The forEach
method is for arrays. It's not working because .getElementsByClassName()
returns an HTMLCollection.
To work around this, use:
var elements = document.getElementsByClassName('hide');
Array.prototype.forEach.call(elements, function(element){
element.style.visibility = "hidden";
});
or shorter:
var elements = document.getElementsByClassName('hide');
[].forEach.call(elements, function(element){
element.style.visibility = "hidden";
});
you can convert elements
to an array and then call forEach().
var elements = document.getElementsByClassName('hide');
elements = Array.prototype.slice.call(elements,0);
elements.forEach(function(element){
element.style.visibility = "hidden";
});
fiddle :https://jsfiddle/assx7hmh/
Base on your code, here is my solution:
function hideRows(){
var elements = document.getElementsByClassName('hide');
for(var key in elements) {
if(elements.hasOwnProperty(key))
elements[key].style.visibility = "hidden";
}
return true;
}
You just need to loop through object because forEach
just accept array.
本文标签: javascriptforEach callback does not execute with getElementsByClassNameStack Overflow
版权声明:本文标题:javascript - forEach callback does not execute with getElementsByClassName - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741577142a2386351.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论