javascript - 将复选框添加到表中

标签 javascript html-table

我正在尝试使用下面的代码创建动态表并填充数据,其工作正常,但我需要向每个表行添加一个复选框选择,我尝试了几种不同的方法,但它不起作用。

代码

//create dt by reading xml string
var xmlString = '<DataTables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file://C:/FRM/xsd/DataTables.xsd" ><Table name="dt_EdgeCaseHome"><Header><Column name="Username" type="String" /><Column name="Email" type="String" /><Column name="Password" type="String" /></Header><Row><Value>brian</Value><Value><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c6a4b4afa7a8a086a3a2a1a3e8a5a9ab" rel="noreferrer noopener nofollow">[email protected]</a></Value><Value>qwerty</Value></Row></Table><Table name="dt_EdgeCaseSpectrum"><Header><Column name="AppHeader" type="String" /><Column name="UserID" type="String" /><Column name="Service" type="String" /><Column name="Clients" type="String" /></Header><Row><Value>Contract</Value><Value>47</Value><Value>Agent</Value><Value>Exodus</Value></Row><Row><Value>Contract</Value><Value>49</Value><Value>Agent</Value><Value>Prometheus</Value></Row></Table></DataTables>',
xml,

// Create table element
table = document.createElement('table');
table.style.width = '100%';
table.setAttribute('border', '1');
tbdy = document.createElement('tbody');
tr = tbdy.insertRow();
tr.id='header';
// Parse the xml
if (window.DOMParser){ // Standard browsers
    var parser = new DOMParser();
    xml = parser.parseFromString(xmlString, "text/xml");
}
else { // Internet Explorer
    xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = false;
    xml.loadXML(xmlString); 
}

var tables = xml.getElementsByTagName("Table");

// for each table
for(var t=0; t<tables.length; t++){
    tableName = tables[t].getAttribute("name");
  console.log(tableName);
  var dtName="dt_EdgeCaseSpectrum";
  if(dtName.match(tableName)){
  // for each table header
    var headers = tables[t].getElementsByTagName("Header");
    var cols = headers[0].childNodes;
    for(var c=0;c<cols.length;c++){
    columnName = cols[c].getAttribute("name");
    td = tr.insertCell();
    td.id=c;
    td.setAttribute('name',columnName);
    td.textContent = columnName;
    console.log(columnName);
    }

    // for each table row
    var rows = tables[t].getElementsByTagName("Row");
    for(var r=0;r<rows.length;r++){
        console.log("row "+r);
      tr = tbdy.insertRow();
      tr.id='iteration_'+r;
        var vals = rows[r].childNodes;
        for(var x=0;x<vals.length;x++){
        value = vals[x].textContent;
      console.log(value);
      td = tr.insertCell();
      td.id=x;
      td.setAttribute('value', value)
      td.textContent = value;
      }
    }
    tbdy.appendChild(tr);
    table.appendChild(tbdy);
    // Append table to the body
    document.body.appendChild(table);
  }
}

这是演示

JS Fiddle Demo

有人可以帮我解决这个问题吗?如何修改以下代码来实现此目的?

最佳答案

类似这样的事情:

//create dt by reading xml string
var xmlString = '<DataTables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file://C:/FRM/xsd/DataTables.xsd" ><Table name="dt_EdgeCaseHome"><Header><Column name="Username" type="String" /><Column name="Email" type="String" /><Column name="Password" type="String" /></Header><Row><Value>brian</Value><Value><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fe9c8c979f9098be9b9a999bd09d9193" rel="noreferrer noopener nofollow">[email protected]</a></Value><Value>qwerty</Value></Row></Table><Table name="dt_EdgeCaseSpectrum"><Header><Column name="AppHeader" type="String" /><Column name="UserID" type="String" /><Column name="Service" type="String" /><Column name="Clients" type="String" /></Header><Row><Value>Contract</Value><Value>47</Value><Value>Agent</Value><Value>Exodus</Value></Row><Row><Value>Contract</Value><Value>49</Value><Value>Agent</Value><Value>Prometheus</Value></Row></Table></DataTables>',
xml,

// Create table element
table = document.createElement('table');
table.style.width = '100%';
table.setAttribute('border', '1');
tbdy = document.createElement('tbody');
tr = tbdy.insertRow();
tr.id='header';
// Parse the xml
if (window.DOMParser){ // Standard browsers
    var parser = new DOMParser();
    xml = parser.parseFromString(xmlString, "text/xml");
}
else { // Internet Explorer
    xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = false;
    xml.loadXML(xmlString); 
}

var tables = xml.getElementsByTagName("Table");

// for each table
for(var t=0; t<tables.length; t++){
    tableName = tables[t].getAttribute("name");
  console.log(tableName);
  var dtName="dt_EdgeCaseSpectrum";
  if(dtName.match(tableName)){
  // for each table header
    var headers = tables[t].getElementsByTagName("Header");
    var cols = headers[0].childNodes;
    for(var c=0;c<cols.length;c++){
    columnName = cols[c].getAttribute("name");
    td = tr.insertCell();
    td.id=c;
    td.setAttribute('name',columnName);
    td.textContent = columnName;
    console.log(columnName);
    }
    var th = tr.insertCell();
    th.id = 'selection';
    th.textContent = 'Select';

    // for each table row
    var rows = tables[t].getElementsByTagName("Row");
    for(var r=0;r<rows.length;r++){
        console.log("row "+r);
      tr = tbdy.insertRow();
      tr.id='iteration_'+r;
        var vals = rows[r].childNodes;
        for(var x=0;x<vals.length;x++){
        value = vals[x].textContent;
        console.log(value);
        td = tr.insertCell();
        td.id=x;
        td.setAttribute('value', value)
        td.textContent = value;
      }
      var select = tr.insertCell();
      var checkbox =  document.createElement("input");
      checkbox.setAttribute('type', 'checkbox');
      checkbox.setAttribute('name', tr.id);
      select.appendChild(checkbox);
    }
    tbdy.appendChild(tr);
    table.appendChild(tbdy);
    // Append table to the body
    document.body.appendChild(table);
  }
}

在另一列中创建复选框元素。将行 ID 指定为名称,以便可以将值传递给其他脚本。

关于javascript - 将复选框添加到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875206/

相关文章:

javascript - 检索内在 promise 的值(value)

javascript - JS 中的 [{}].concat() 是做什么的?

html - 如何在垂直滚动时固定表格的位置。在 y 轴上固定位置但在 x 轴上可滚动

css - 不同风格的表内表?

javascript - 我怎样才能运行一段代码直到得到相同的结果 3 次?

javascript - 绕原点旋转点

html - 将 HTML 表格及其列从水平旋转到垂直的自动方法

JavaScript:元素 style.display = 'block' 不起作用

javascript - 防止重复产品从购物车中删除

HTML 表格 - 我可以在 thead 之前有一个额外的 tbody 吗?