我有一个由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元素生成的,但我仍然不明白它们为什么表现不同。我的意思是,最后他们都只是拥有价值观的数组,不是吗?有人可以详细说明一下吗?谢谢!
答案 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 ,它与具有一些额外功能的数组几乎相同。
但HTMLCollection中包含的各个元素不是简单的字符串,您可以调用字符串函数或方法,而不是更具体的对象HTMLElement
你可以说这与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.property
,object["property"]
,object["property"] = value
或object.property = value
编写或读取。
同时,array[index] = value
或array[index]
编写或读取数组。 对象和数组之间的主要区别是数组引用数字,而对象引用属性名称(字符串)。要获得对象的长度,只需使用object.keys(b).length
,因为object.keys
以数组格式返回对象的所有属性名称,这支持.length
。< / p>
你可能想知道的任何事情都在这里:https://www.w3schools.com/js/js_arrays.asp