如果你br EAK你的表爲<thead>
部分與一個<tbody>
部分,你可以讓你的選擇只能定位是表的主體部分行:
http://fiddle.jshell.net/g8z5h/8/
d3.select(".DataDetail").select("tbody tr:nth-child(" + (i+1) + ")")
.classed("highlight", true);
你也可以使用
d3.select(".DataDetail").select("tbody").select("tr:nth-child(" + (i+1) + ")")
.classed("highlight", true);
(只有在您動態追加行時纔會真正起作用,在這種情況下,請使用後一個版本,以便在<tbody>
內插入添加的行。)
我不確定你想用隱藏的行做什麼。目前它正在被選中,並且背景顏色與其他任何一行相同,您只是看不到它。
如果你想忽略行計數中的隱藏行,它會變得有點棘手。 CSS選擇器不能爲你計數 - I tried使用基於類的選擇器來排除隱藏的行,然後使用第n種類型(與第n個孩子相比)來進行計數,但是nth-of-類型計數仍然基於所有行,而不僅僅是與選擇器其餘部分匹配的行。
相反,您可以使用d3過濾器來查找具有匹配索引的行。但是,爲確保d3選擇基於正確的索引(不包括隱藏行),您仍然需要確保選擇器僅匹配常規行。因爲它是有一類獨特的價值隱藏的行,這意味着使用一個:not(selector)
語法:
d3.select(".DataDetail").selectAll("tbody tr:not(.hidden)")
.on("mouseover", SelectData)
.on("mouseleave", SelectNone);
function SelectData(d, i) {
SelectNone(d,i);
d3.select(".SelectPanel" + Coord(i))
.classed("highlight", true);
d3.select(".DataDetail").selectAll("tbody tr:not(.hidden)")
.filter(function(d2,j) {return j===i;})
.classed("highlight", true);
}
需要注意的是,爲了確保正確的索引i
被傳遞給事件處理函數,用來選擇當添加事件偵聽器時也必須排除隱藏的行。
http://fiddle.jshell.net/g8z5h/10/
好東西。這將有助於幫助。我現在正在申請。 雖然我認爲你誤解了我的隱藏領域。我想,主要是通過頂部表格,將數據隱藏在底部表格中。 – Cymon
好吧,如果你只是隱藏數據行,但希望它們仍然是你的索引計數的一部分,你真的不需要做任何特別的事情。第一個例子是這樣默認的。 – AmeliaBR