innerHTML 不适用于 getElementsByClassName

Posted

技术标签:

【中文标题】innerHTML 不适用于 getElementsByClassName【英文标题】:innerHTML isn't working with getElementsByClassName 【发布时间】:2014-09-16 04:22:44 【问题描述】:

我只是一个初学者。我正在尝试使用innerhtml。 我想我写了正确的代码,但它不起作用。 当我单击触发器时,页面变为白色并显示状态:'connecting' 不知道问题出在哪里

请有人帮助我。

这是我的代码。

HTML 代码

<div class = "head">
<nav>
<a onClick="open()">

<div class = "body">
<div class = "bodyL">
<div class = "newsPnT">

javascript 代码

function open() 
   document.getElementsByClassName('newsPnT').innerHTML = "asdfasdfasdf";

我的代码有什么问题?

PS:我使用的是 Firefox Aurora。当我单击触发器时,“调试器 > 源”显示“正在等待源”。

【问题讨论】:

除了下面给出的答案(getElementsByClassName 返回一个类似数组的对象)之外,请注意innerHTML 会导致很多问题(安全性、DOM 回流)。上面的例子可以使用textContent 【参考方案1】:

getElementsByClassName() 返回包含元素的数组。

返回具有所有给定类名的所有子元素的类数组对象。在文档对象上调用时,将搜索完整的文档,包括根节点。您也可以在任何元素上调用 getElementsByClassName();它只会返回具有给定类名的指定根元素的后代元素。

所以你需要像这样迭代数组并设置innerHTML,即

var elements = document.getElementsByClassName('myClass');
Array.prototype.forEach.call(elements, function(element) 
    element.innerHTML = 'Your text goes here';
);

还有一点小红包JSFiddle

【讨论】:

【参考方案2】:

className 'open' 似乎是 javascript 的关键字。 我将 className 从“open”更改为“openThis”,这就是问题的解决方案。

【讨论】:

以上是关于innerHTML 不适用于 getElementsByClassName的主要内容,如果未能解决你的问题,请参考以下文章

为啥 innerText,innerHTML 属性不适用于 javascript 中的输入标签?

innerHTML 不适用于 JS 中的类名

`innerHTML` 不适用于 `input` 标签,但 `value` 可以

Javascript innerHTML 不适用于图像,但适用于文本?

Javascript - innerHTML 不适用于 HTML 选择菜单

某些 Google 字体不适用于 iFrame innerHTML