2016-07-22 51 views
3

我一直在试图创建一个由对象填充的html表格。做一个可选择的HTML表格作为值的对象

该表应该可以按行选择(通过悬停),当该行悬停在函数ran上时。

表头是在阵列中:

var topTitles = ["Type","Origin","Destination","T","A","G"]; 

所有的数据都坐在里面阵列,

var Type = []; 
var Origin = []; 
var Destination = []; 
var T = []; 
var A = []; 
var G = []; 

我试图修改的示例片的代码,但它是非常困难的将其概念化并将其置于程序化解决方案中。将这些数据直接映射到交互式表格的简便方法是什么?

function createTable() { 
    var table = document.getElementById('matrix'); 
    var tr = addRow(table); 

    for (var j = 0; j < 6; j++) { 
    var td = addElement(tr); 
    td.setAttribute("class", "headers"); 
    td.appendChild(document.createTextNode(topTitles[j])); 
    } 
    for (var i = 0; i < origins.length; i++) { 
    var tr = addRow(table); 
    var td = addElement(tr); 
    td.setAttribute("class", "origin"); 
    td.appendChild(document.createTextNode(mode[i])); 
    for (var j = 0; j < topTitles.length; j++) { 
     var td = addElement(tr, 'element-' + i + '-' + j); 
     td.onmouseover = getRouteFunction(i,j); 
     td.onclick = getRouteFunction(i,j); 
    } 
    } 
} 
function populateTable(rows) { 
    for (var i = 0; i < rows.length; i++) { 
    for (var j = 0; j < rows[i].elements.length; j++) { 
     var distance = rows[i].elements[j].distance.text; 
     var duration = rows[i].elements[j].duration.text; 
     var td = document.getElementById('element-' + i + '-' + j); 
     td.innerHTML = origins[i] + "<br/>" + destinations[j]; 
    } 
    } 
} 

if (highlightedCell) { 
    highlightedCell.style.backgroundColor="#ffffff"; 
} 
highlightedCell = document.getElementById('element-' + i + '-' + j); 
highlightedCell.style.backgroundColor="#e0ffff"; 
showValues(); 
} 
+0

的HTML表格元素(

)表示表格数据[MDN(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table) –

回答

1

这可能是我能想到建表不改变你的数据结构,并非常清楚,所有的数据是来自最简单的方法。它绝对不是最好的代码,但它应该适合你的情况。

CodePen

var topTitles = ["Type","Origin","Destination","T","A","G"]; 
var Type = ["Type1", "type2", "type3"]; 
var Origin = ["Origin1", "origin2", "origin3"]; 
var Destination = ["Destination1", "Destination2", "dest3"]; 
var T = ["t1", "t2","T3"]; 
var A = ["steaksauce", "a2", "a3"]; 
var G = ["G1", "G2", "G3"]; 
var appendString = []; 
for(var i =0; i < topTitles.length; i++){ 
    if(!i){ 
    appendString.push("<tr><td>" + topTitles[i] + "</td>"); 
    } 
    else if(i === topTitles.length -1){ 
    appendString.push("<td>" + topTitles[i] + "</td></tr>"); 
    } 
else{ 
    appendString.push("<td>" + topTitles[i] + "</td>"); 
    } 
} 
for(var i =0; i < Type.length; i++){ 
    appendString.push("<tr><td>" + Type[i] + "</td><td>" + Origin[i] + "</td><td>" + Destination[i] + "</td><td>" + T[i] + "</td><td>" + A[i] + "</td><td>" + G[i] + "</td></tr>");  
} 
var table = document.getElementById('table'); 
table.innerHTML = appendString.join(''); 
+0

感谢@JD E这个清晰的例子,但是如何获得突出显示效果呢?我希望强调一个单元格,然后运行ShowValue()函数 – Katserbot

+0

你可以有每个TD元素有onmouseover事件 '' 这意味着你可以编写一个函数 'function hightlightAndShowValue(){ this.className + =“highlightclass”; ShowValue();} ' 当然我们想要自己清理后如此。 '

function RemoveHighlight(){ this.className =“”; } ' –

+0

这可能是一个更好的删除类功能。 'function RemoveClass(){ this.className = this.className.replace(“highlight”,“”); }' –