getElementsByClassName 产生错误“undefined”
getElementsByClassName produces error "undefined"
我有几个textboxes
类output
。我希望能够在带有ID
combined
的div
中将它们的值打印为纯 HTML 列表。现在,我有以下代码:
function doCombine() {
document.getElementById('combined').innerHTML =
document.getElementsByClassName('output').value + ",";
}
然而,当我运行该函数时,我收到错误消息undefined
,。当我在 .value
之前添加一个 [0]
时,它可以工作,但只显示第一个textbox
的值。我在某处读到[i]
将显示所有值,但这似乎不起作用。
我做错了什么?
getElementsByClassName
返回一组具有所有给定类名的元素。在文档对象上调用时,将搜索整个文档,包括根节点。您也可以在任何元素上调用 getElementsByClassName;它将仅返回作为具有给定类名的指定根元素的后代的元素。
所以你应该做
var elements = document.getElementsByClassName('output');
var combined = document.getElementById('combined');
for(var i=0; i < elements.length; i++) {
combined.innerHTML += elements[i].value + ",";
}
>getElementsByClassName
返回一个类似数组的对象,而不是单个元素(注意函数名称中的复数形式(。你需要迭代它,或者如果你只想对它返回的第一个元素进行操作,请使用数组索引:
document.getElementsByClassName('output')[0].value + ","
getElementsByClassName 返回一组元素。您需要遍历它:
var elems = document.getElementsByClassName("output");
for(var i=0; i<elems.length; i++) {
combined.innerHTML += elems[i].value + ",";
}
这就是添加 [0] 起作用的原因,因为您正在访问此集合中的第一个对象。
此函数将返回具有该名称的所有元素,因为"name"属性不唯一,因此它返回一个列表(确切地说是nodeList(。
要打印出所有值,您需要添加一个循环。类似的东西
var finalvar = "";
var arr = document.getElementsByClassName('output');
for (i=0;i<arr.length;i++) {
finalval = finalval + arr[i].value;
}
document.getElementById('combined').innerHTML = finalval
getElementsByClassName将返回一组元素。参考:https://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByClassName#Summary。有些浏览器返回HTMLCollection
,有些浏览器返回NodeList
。https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection#Browser_compatibility 但它们都有length
属性和item
方法的共同点。所以你可以像这样迭代。
function doCombine()
{
var listOfOutputElements = document.getElementsByClassName('output');
var combinedItem = document.getElementById('combined');
for (var i = 0; i < listOfOutputElements.length; i += 1) {
combinedItem.innerHTML += listOfOutputElements.item(i).innerHTML;
}
}
试试这个:
<script type="text/javascript">
function doCombine()
{
var combined = document.getElementById('combined');
var nodeList = document.getElementsByClassName('output');
var nodeListLength = nodeList.length;
for (i=0;i<nodeListLength;i++) {
combined.innerHTML += nodeList[i] + ',';
}
</script>
getElementsByClassName 返回一个 NodeList。因此,您将无法对其调用 value 方法。请尝试以下操作:
function doCombine() {
var combined = document.getElementById('combined');
var outputs = document.getElementsByClassName('output');
for(var i=0; i<outputs.length; i++){
combined.innerHTML += outputs[i].value + ',';
}
}
http://jsfiddle.net/FM3qH/
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- /undefined在我的404错误日志中多次出现
- 为什么会出现错误,“UncaughtTypeError:undefined不是函数”
- 未捕获的类型错误:undefined不是函数$
- Bootstrap-“;未捕获的类型错误:undefined不是函数;
- 尝试使用.ninnerHTMLlog打印数据,获取错误Uncaught TypeError:undefined不是函数
- 得到“;undefined不是函数“;错误
- NodeJS:zlib.gunzip(body)错误地返回“undefined”
- 将服务中的函数绑定到$scope(错误:无法设置undefined的属性'onChange')
- 未捕获的类型错误:undefined不是函数
- HTML5拖拽&drop正在抛出undefined不是函数错误
- 我得到了这个错误,但是不要;我不知道如何修复它,www.example.com/undefined?1460018627
- d3.js voronoi.clipExtent()返回错误:undefined不是函数
- 将 jQuery 脚本加载更改为异步后出现“$ is undefined”错误
- 从另一个调用原型方法-得到'undefined'错误
- 使用RegisterClientScriptBlock在页面末尾注册一个脚本,以避免sys undefined错误
- CSS with JavaScript -无法读取属性'undefined'错误
- 什么会导致'消息:'console'undefined"错误突然出现
- 插入对象时myStorage是undefined错误
- jQuery alert 'undefined'错误而不是Java/Spring异常详细信息