我试图通过JS使用类名获取HTML的每个元素,然后根据range
对象onchange
中的值更改其高度和宽度。
浏览器显示错误:document.getElementsByClassName(...).forEach is not a function
但是我试图以可能的方式构建它,但仍然没有......
这是我的第一个js代码的样子:
function updateInput(val) {
document.getElementById('valueInput').innerHTML=val; /*This is just to show the value to the user*/
document.getElementsByClassName('oneResult').forEach(function changeWidth(element) { element.style.width = val + 'px'; } );
document.getElementsByClassName('oneResult').forEach(function changeWidth(element) { element.style.height = val + 'px'; } );
}
然后我尝试了这个:
function updateInput(val) {
document.getElementById('valueInput').innerHTML=val;
function oneResultWH(element) {
element.style.width = val + 'px';
element.style.height = val + 'px';
}
document.getElementsByClassName('oneResult').forEach(oneResultWH);
}
但仍然没有运气..
这就是我的PHP的样子:
print '<div class="oneResult" style="background-image:url(Pictures/'.$img.'); height: 100px; width:100px; ">
<a id="word'. $x .'">'. $textConversion[$x] .'</a></div>';
对此事项的任何意见都表示赞赏!
答案 0 :(得分:8)
浏览器显示错误:document.getElementsByClassName(...)。forEach不是函数
因为getElementsByClassName
没有返回数组,它会返回HTMLCollection
。他们没有forEach
方法(但是,它可能在某个时候,或者不是)。
你可以使用数组有这样的那个:
Array.prototype.forEach.call(document.getElementsByClassName("oneResult"), function(element) {
// Use `element` here
});
或者在现代浏览器(或使用polyfill)上,您可以从集合中创建一个数组:
Array.from(document.getElementsByClassName("oneResult")).forEach(function(element) {
// Use `element` here
});
另一种选择是将forEach
添加到HTMLCollection
,您可以在任何模糊的现代浏览器上执行此操作(即使是IE8,如果您首先填充Array.prototype.forEach
):
if (typeof HTMLCollection !== "undefined" && HTMLCollection.prototype && !HTMLCollection.prototype.forEach) {
Object.defineProperty(HTMLCollection.prototype, "forEach", {
value: Array.prototype.forEach,
configurable: true,
writable: true
});
}
最后请注意,虽然HTMLCollection
没有forEach
,但NodeList
返回的querySelectorAll
却有,但在某些较旧的浏览器上可能需要polyfilled。如有必要,请参阅this answer有关填充NodeList
的信息。
更多:
HTMLCollection
s)