我是javascript的新手,对于练习,我使用javascript对特定类的表进行条带化甚至行。除此之外,我试图仅使用javascript在表行上创建“悬停”效果。
我能够创建onmouseover效果,但是,我很难回到表格行的默认样式onmouseout。
请记住,我知道这可以通过css或JQuery轻松实现;但是,为此,我只想坚持使用javscript。
我尝试了什么:
function alternate(){
var tables = document.getElementsByTagName("table");
//apply the code to ALL tables on the page with a particular class
for (var ti = 0; ti < tables.length; ++ti) {
if (tables[ti].className == "striped"){ //stripe tables
var rows = tables[ti].getElementsByTagName("tr");
for(i = 0; i < rows.length; i++){
//change style of even rows to create striped effect
if(i % 2 == 0){
rows[i].className += "even"; //stripe even rows while maintaining default style to odd rows
}
rows[i].onmouseover = function() {
this.className="";
this.className="hovered";
}
rows[i].onmouseout = function() {
if(i % 2 == 0){
this.className="even";
}else{
this.className="odd";
}
}
}
}
}
}
答案 0 :(得分:1)
我不确定我是否完全理解你的问题,但我已经创造了一个jsfiddle来做我认为你的意思。
从我所知道的问题是,当触发row [i] .mouseout时,i的值是表中表行的数量。修复是,在鼠标悬停时保存原始类名,然后重新分配该类名onmouseout。这是小提琴。 http://jsfiddle.net/LBaZu/4/
function alternate() {
var tables = document.getElementsByTagName("table");
for (var ti = 0; ti < tables.length; ++ti) {
if (tables[ti].className == "striped") {
var rows = tables[ti].getElementsByTagName("tr");
var cls; // Variable to save the className
for (var i = 0; i < rows.length; i++) {
if (i % 2 == 0) rows[i].className = "even";
rows[i].onmouseover = function() {
cls = this.className; // Assign the className here
this.className = "hovered";
}
rows[i].onmouseout = function() {
this.className = (cls == 'even') ? cls : 'odd';
}
}
}
}
}
编辑:我重新阅读了你的问题,我想到你只想在mouseout上将奇数表行classname设置为odd,而不是之前。