admin管理员组文章数量:1287989
I'm exploring how to style a table in such a way that the border can be changed when the mouse hovers over a column.
When the mouse is over a column, I want to highlight that column by changing the border color:
To highlight, I am using the following JavaScript code with the jQuery library:
$('td').hover(function() {
var t = parseInt($(this).index()) + 1;
$('td:nth-child(' + t + ')').addClass('highlighted');
},
function() {
var t = parseInt($(this).index()) + 1;
$('td:nth-child(' + t + ')').removeClass('highlighted');
});
with the following CSS:
.highlighted {
border-top: 2px solid black;
border-right: 2px solid black;
border-left: 2px solid black;
}
You can view how this works in this JSFiddle: / This is only working when I hover on the left-most column. Otherwise it highlights the right-column (and top) but not the left vertical column. Is there a way of making the left-vertical column appear?
Ideally, I would like the effect to ignore the lowest row, but I am not sure how to exclude a row from the jQuery selection.
I've based my attempt closely on this previous question.
I'm exploring how to style a table in such a way that the border can be changed when the mouse hovers over a column.
When the mouse is over a column, I want to highlight that column by changing the border color:
To highlight, I am using the following JavaScript code with the jQuery library:
$('td').hover(function() {
var t = parseInt($(this).index()) + 1;
$('td:nth-child(' + t + ')').addClass('highlighted');
},
function() {
var t = parseInt($(this).index()) + 1;
$('td:nth-child(' + t + ')').removeClass('highlighted');
});
with the following CSS:
.highlighted {
border-top: 2px solid black;
border-right: 2px solid black;
border-left: 2px solid black;
}
You can view how this works in this JSFiddle: http://jsfiddle/sCFjj/1/ This is only working when I hover on the left-most column. Otherwise it highlights the right-column (and top) but not the left vertical column. Is there a way of making the left-vertical column appear?
Ideally, I would like the effect to ignore the lowest row, but I am not sure how to exclude a row from the jQuery selection.
I've based my attempt closely on this previous question.
Share Improve this question edited Jul 17, 2017 at 10:08 Brian Tompsett - 汤莱恩 5,89372 gold badges61 silver badges133 bronze badges asked Nov 21, 2012 at 15:30 djqdjq 15.3k46 gold badges126 silver badges158 bronze badges 5- that the left border disappears is because of the border-collapse property. it is by default set to collapse. – Sven Bieder Commented Nov 21, 2012 at 15:47
-
adding
$('tr:last-child td').removeClass('highlighted');
after you add the .highlighted class will "ignore the lowest row" – Andy Commented Nov 21, 2012 at 15:48 -
@Andy for some reason this only removes the style on the left hand side. Does
$('tr:last-child td')
reference the lowest cell in the selected column? I was experimenting setting it a different color and it did not behave as I thought it would. – djq Commented Nov 21, 2012 at 16:05 - It references all of the cells (td) in the last row (tr) and then removes the class. If you changed the colour it would affect all cells in that row, but because only the column your hovering on should have the class (.highlighted) you will only see the difference on that cell – Andy Commented Nov 21, 2012 at 16:22
-
I understand now how
$('tr:last-child td')
references the row, but I can't understand howhighlighted
can be used.$('tr:last-child td highlighted')
(or various permutations) do not seem to make a difference. – djq Commented Nov 21, 2012 at 18:48
4 Answers
Reset to default 7Link: jsFiddle. Also add to previous collumn border-right and you will get that you want. I think that collumn's right border is over next collumn left border.
JavaScript:
$('td').hover(function() {
var t = parseInt($(this).index()) + 1;
$('td:nth-child(' + t + ')').addClass('highlighted');
if(t>1){
var t1 = t -1;
//alert("T:" + t + "<br/> T1:" + t1);
$('td:nth-child(' + t1 + ')').addClass('highlightedPrev');
}
},
function() {
var t = parseInt($(this).index()) + 1;
$('td:nth-child(' + t + ')').removeClass('highlighted ');
if(t>1){
var t1 = t -1;
$('td:nth-child(' + t1 + ')').removeClass('highlightedPrev');
}
});
CSS:
.highlighted {
border: 2px solid black;
}
.highlightedPrev {
border-right: 2px solid black;
}
Hope I solved your problem.
It seems every row is on top of his "right neighbor", so they're overlapping each other. You can research deeper why is that, or just fix it with:
$('td').hover(function() {
var t = parseInt($(this).index()) + 1;
$('td:nth-child(' + t + ')').addClass('highlighted');
$('td:nth-child(' + (t-1) + ')').addClass('highlighted_only_right');
},
function() {
var t = parseInt($(this).index()) + 1;
$('td:nth-child(' + t + ')').removeClass('highlighted');
$('td:nth-child(' + (t-1) + ')').removeClass('highlighted_only_right');
});
Tell us if you find something better ;)
Table border collapsing
The problem you're facing is that tables by default collapse borders. So you have to set an additional style on table itself:
border-collapse: separate;
This also means that your borders will need to have 1 pixel borders because sibling borders will add to 2 pixels.
Additional styling can then make it possible to remove inner ones and just highlight outers.
Try this: http://jsfiddle/sCFjj/27/
I added a highlighted_left, and simplified the javascript a bit (removing the highlight class for all cells)
$('td').hover(function() {
var t = parseInt($(this).index());
$('tr td').removeClass('highlighted');
$('tr td').removeClass('highlighted_left');
$('tr td:nth-child(' + (t+1) + ')').addClass('highlighted');
$('tr td:nth-child(' + (t) + ')').addClass('highlighted_left');
});
Where highlighted_left is:
.highlighted_left{
border-right: 2px solid black;
}
本文标签: javascriptHow can a html table highlight columns by changing the border on hoverStack Overflow
版权声明:本文标题:javascript - How can a html table highlight columns by changing the border on hover? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741334902a2372984.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论