能够获得元素长度而不是innerHTML

时间:2016-04-27 10:01:36

标签: javascript function

我正在使用一个函数,其中我有一些元素,点击那些元素我需要找到其他元素的innerHTML。

我面临的问题是我能够找到该元素的长度,但同样地,当我试图获得相同元素的innerHTML时,它显示未定义。

我的功能

var question = document.querySelectorAll('.questions li a');
var i;
for (i = 0; i < question.length; i++) {
  question[i].addEventListener('click', myFunction)
}

function myFunction() {
  var div = document.getElementsByClassName('need_help')
  alert(div.length);
  //alert(div.innerHTML);
}

以下是我发现长度及其工作正常的示例:https://jsfiddle.net/uw0nsf4g/

这是我发现innerHTML并显示未定义的示例:https://jsfiddle.net/uw0nsf4g/1/

请告诉我代码有什么问题,如果元素是可搜索的,那为什么不是它的innerHTML?

提前致谢!

4 个答案:

答案 0 :(得分:2)

返回的长度是带元素的数组的长度;尝试以下方法:

var question = document.querySelectorAll('.questions li a');
var i;
for (i = 0; i < question.length; i++) {
    question[i].addEventListener('click', myFunction)
}

function myFunction() {
    var divs = document.getElementsByClassName('need_help');
    for(var j = 0; j < divs.length; j++) {
        alert(divs[j].innerHTML);
    }
}

答案 1 :(得分:2)

使用getElementsByClassName函数可以获得数组od Elements。您只需要获得所需的索引并提醒innerHTML。 例如:

function myFunction() {
    var div = document.getElementsByClassName('need_help')
    alert(div.length);
    alert(div[0].innerHTML);
}

答案 2 :(得分:1)

因为它返回一个数组。

alert(div[0].innerHTML); 

会起作用

答案 3 :(得分:1)

DOM API函数getElementsByClassName()返回类似于Object的数组。 所以你对这个函数的调用就是返回一个数组。 inner.HTML属性可以使用DOM节点而不是DOM节点数组... 您需要从数组中选择一个元素来获取其内容 您可以循环遍历所有节点以获取其内容,或者您​​可以在上述情况下使用此数组中的第一个元素,如下所示:

var question = document.querySelectorAll('.questions li a');
var i;
for (i = 0; i < question.length; i++) {
    question[i].addEventListener('click', myFunction);
}

function myFunction() {
    var div = document.getElementsByClassName('need_help');
    alert(div[0].innerHTML);
}

OR loop through all of the elements to get their content:

function myFunction() {
    var div = document.getElementsByClassName('need_help');
    for(var k = 0; k < div.length; k++) {
        alert(div[k].innerHTML);
    }
}