JavaScript:getElementsByTagName()创建的数组不会返回其元素的长度吗?

时间:2018-03-01 03:11:06

标签: javascript arrays getelementsbytagname

我有一个由getElementsByTagName()方法创建的数组,当我要求它的元素长度时,我不明白为什么会得到undefined

在代码中,有问题的数组被称为b,还有一个名为theArray的数组,它被用作我期望从数组{{1}中获得的行为的一个例子}}



b

var str = document.getElementById("str");
var b = document.getElementsByTagName("b");
var h1 = document.getElementsByTagName("h1");
var h2 = document.getElementsByTagName("h2");

b[0].style.color = "red";
b[1].style.color = "yellow";
b[2].style.color = "green";
 
var theArray = ["Goodbye", "World"]; 

h1[0].innerHTML = b[0].length;
h2[0].innerHTML = theArray[0].length;




更新 我不明白的是数组<h1>H1</h1> <h2>H2</h2> <span id="str">He is <b>likely</b> to be <b>called</b> up for Thursday's <b>match</b> against Italy.</span>b之间的真正区别是什么,以及它们为什么表现不同。我想,我看到@jens的意思是把它们称为两个不同的东西,也就是说,一个是纯JavaScript,另一个是用HTML元素生成的,但我仍然不明白它们为什么表现不同。我的意思是,最后他们都只是拥有价值观的数组,不是吗?有人可以详细说明一下吗?谢谢!

3 个答案:

答案 0 :(得分:2)

你得到两个不同的东西的长度。在b[0].length的情况下,您试图获取HTML元素的长度。 b.length会给你3个因为3个元素匹配。使用theArray[0].length,您将获得有效字符串的长度。

答案 1 :(得分:1)

否。它们都不一样。

var theArray = ["Goodbye", "World"];这就是我们所说的真实数组,而

var b = document.getElementsByTagName("b");  这里b是HTMLCollection ,它与具有一些额外功能的数组几乎相同。

enter image description here

但HTMLCollection中包含的各个元素不是简单的字符串,您可以调用字符串函数或方法,而不是更具体的对象HTMLElement

enter image description here

你可以说这与java类似;在java中,您可以使用length属性查找数组的长度,对于字符串,您可以使用length()方法,但不能对employee.length;等类对象执行此操作(除非您已实现自己在课堂上的功能)。这与你正在做的b[0].length;完全相似

现在你可以猜测你需要做些什么来解决这个问题。你需要获得innerHTML属性,该属性包含一个html标记内容的字符串表示。你可以在那个标签的HTMLElement对象上调用它(这是该标签的obj表示,对标签进行“处理”)

var str = document.getElementById("str");
var b = document.getElementsByTagName("b");
var h1 = document.getElementsByTagName("h1");
var h2 = document.getElementsByTagName("h2");

b[0].style.color = "red";
b[1].style.color = "yellow";
b[2].style.color = "green";
 
var theArray = ["Goodbye", "World"]; 

h1[0].innerHTML = b[0].innerHTML.length;
h2[0].innerHTML = theArray[0].length;
<h1>H1</h1>
<h2>H2</h2>

<span id="str">He is <b>likely</b> to be <b>called</b> up for Thursday's <b>match</b> against Italy.</span>

答案 2 :(得分:1)

任何document.getSomethingBySomething都会返回对象与数组不同。对象可以由{ "property" : "value", "next property" : "next value" }编写,可以由object.propertyobject["property"]object["property"] = valueobject.property = value编写或读取。

同时,array[index] = valuearray[index]编写或读取数组。 对象和数组之间的主要区别数组引用数字,而对象引用属性名称(字符串)。要获得对象的长度,只需使用object.keys(b).length,因为object.keys以数组格式返回对象的所有属性名称,这支持.length。< / p>

你可能想知道的任何事情都在这里:https://www.w3schools.com/js/js_arrays.asp