getElementsByTagName(blockquote)出现问题

时间:2016-03-22 22:12:29

标签: javascript html

我试图让它返回“ha,awesome”,然后是“awesome”这个词的索引

HTML:

<blockquote id = "blocky">

ha, awesome<br>

</blockquote>

JS:

var x = document.getElementsByTagName(blockquote).innerHTML ;
var n = x.indexOf("awesome");
document.getElementsByTagName(blockquote).innerHTML = x + "<br>" + n;

如果我将JS改为此,它可以正常工作

var x = document.getElementById("blocky").innerHTML ;
var n = x.indexOf("awesome");
document.getElementById("blocky").innerHTML = x + "<br>" + n;

https://jsfiddle.net/mzrt/zaf98g8y/1/

3 个答案:

答案 0 :(得分:5)

基本上getElementsByTagName将返回一个node list,一个类似于对象的数组,你不能直接从它访问node的属性,你必须使用括号表示法来获取第一个节点从它然后你可以把它当作节点对象,

var x = document.getElementsByTagName('blockquote')[0].innerHTML;

由于您定位的元素是具有ID的元素,因此最好使用getElementById

答案 1 :(得分:5)

首先,你需要传递一个字符串,而不是一个变量(除非该变量包含一个字符串)。

var x = document.getElementsByTagName('blockquote');

接下来,document.getElementsByTagName返回一个元素集合,而不是单个元素。您可以使用[0]获得第一个结果。

var x = document.getElementsByTagName('blockquote')[0];

或者您可以使用for loop迭代所有元素。

for (var i = 0; i < x.length; i++) {
  var element = x[i];
  element.innerHTML = '...';
}

答案 2 :(得分:2)

var x = document.getElementsByTagName('blockquote')[0].innerHTML ;
var n = x.indexOf("awesome");
document.getElementsByTagName('blockquote')[0].innerHTML = x + "<br>" + n;

按标签名称获取元素会返回一个节点列表,因此您必须告诉您想要的whitch节点。 您还应该在单引号之间传递标记名。