带有getElementByClassName的innerHTML没有'不起作用
innerHTML with getElementByClassName doesn't work
这个有效:
<td onmouseover="document.getElementById('textbox').innerHTML='Hidden text'" onmouseout="document.getElementById('textbox').innerHTML='Show text'">
<div id="textbox">Show text</div>
</td>
但这个没有:
<td onmouseover="document.getElementByClassName('textbox').innerHTML='Hidden text'" onmouseout="document.getElementByClassName('textbox').innerHTML='Show text'">
<div class="textbox">Show text</div>
</td>
我该怎么解决这个问题?我需要一个类来多次使用它。
没有getElementByClassName
函数,只有getElementsByClassName
函数,因为给定类可以有多个元素。
你可以更换
document.getElementByClassName('textbox')
带有
document.getElementsByClassName('textbox')[0]
编辑问题后编辑:
此功能在IE8上不可用。如果你想在这个浏览器上使用它,你必须添加一个垫片,比如这个问题中描述的那个。
它是getElementsByClassName
。注意在Element
之后的复数s
。
由于它是一个数组,您需要指定索引号。
document.getElementsByClassName('class-name')[0].innerHTML = 'html text'
如果需要对每个元素应用更改,请使用for循环。
for(i in document.getElementsByClassName('class-name')){
document.getElementsByClassName('class-name')[i].innerHTML = 'html text';
}
如果您可以使用jQuery,那么使用.html()
:会更简单
$("#textbox").html("Hidden text") // id=textbox
$(".textbox").html("Hidden text") // class=textbox
这是因为getElementsByClassName
正在返回一个元素数组。你可以试试
document.getElementsByClassName('textbox')[0].innerHTML='Hidden text'
document.getElementByClassName('whatever')
返回文档中的html对象元素数组,
所以你需要
var ele = document.getElementsByClassName('textbox');
ele[0].innerHTML = "Whatever text" ;
如果要将内部html设置为此类的所有元素你可以使用
for(var i=0;i<ele.length;i++)
{
ele[i].innerHTML = "we all are of same class";
// or you can dynamically insert different text too
}
如果使用document.querySelector:会怎样
<td onmouseover="document.querySelector('.textbox').innerHTML='Hidden text'" onmouseout="document.querySelector('.textbox').innerHTML='Show text'">
<div class="textbox">Show text</div>
</td>
我觉得这个很管用。
你还应该考虑其他一些事情。在html中添加这样的东西并不是一个好主意。这是因为每次你都在执行一些事情。最好缓存document.querySelector或document.getElementsByClassName的结果。想象一下,如果表中有1000行,会发生什么。这里有一个jsfiddle演示了如何提高代码的性能http://jsfiddle.net/krasimir/Zbgng/2/
HTML
<table><tr>
<td class="table-column">
column1
</td>
<td class="table-column">
column2
</td>
<td class="table-column">
column3
</td>
</tr></table>
<div class="textbox">Show text</div>
<div class="textbox">Show text</div>
<div class="textbox">Show text</div>
JS-
var columns = document.querySelectorAll(".table-column");
var textboxes = document.querySelectorAll(".textbox");
for(var i=0; column=columns[i]; i++) {
column.addEventListener("mouseover", function() {
replaceText("Hidden text");
});
column.addEventListener("mouseout", function() {
replaceText("Show text");
});
}
var replaceText = function(str) {
for(var i=0; field=textboxes[i]; i++) {
field.innerHTML = str;
}
}
相关文章:
- 我的AngularJS表达式没有'不起作用
- jpm的默认Firefox路径没有'不起作用
- pageMod没有'似乎不起作用
- jQuery.remove(Selector)没有'不起作用
- Phonegap 3.7.0手电筒插件没有'不起作用
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- javascript选项卡没有'不起作用
- JQuery示例不起作用-“;对象没有't支持属性或方法'按钮'&”;
- I'我试图在文本区域中进行特定的输入,调用特定的javascript函数,但没有成功;不起作用
- 手机摄像头没有'不起作用
- AngularJS没有'不起作用
- I'我不知道为什么我的代码没有'不起作用
- -webkit转换在JavaScript旋转动画中不起作用(没有JQuery)
- 角度 UI 类型提前不起作用 - 没有错误
- Jquery 谷歌自动完成不起作用 - 没有错误
- 在iframe中编写一些html和js,在IE中不起作用:没有定义$
- Peerjs不起作用.没有错误
- Twitter Bootstrap的下拉菜单不起作用——没有展开
- jQuery在任何浏览器中都不起作用(没有任何效果),但它在Codepen中工作
- 文档就绪不起作用.没有控制台错误,并且包括jQuery