【问题标题】:Make XML to sortable HTML table using javascript使用 javascript 将 XML 转换为可排序的 HTML 表
【发布时间】:2016-05-31 21:41:56
【问题描述】:

谁能告诉我为什么我似乎无法对这张表进行排序?我从这个站点下载了 sorttable.js:http://www.kryogenix.org/code/browser/sorttable/#ajaxtables

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta charset="utf-8">
      <meta http-equiv="Content-Type" content="text/html">
      <title>XML Table Sorting</title>
      <link rel="stylesheet" type="text/css" media="all" href="css/styles.css">
      <script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
      <script type="text/javascript" src="js/jquery.tablesorter.min.js"></script>
      <script type="text/javascript" src="jssort.js"></script>
    </head>

    <body>
     <div id="wrapper">
      <h1>Sortable Table of Search Queries</h1>

      <table id="sortableTable" class="sortable" cellspacing="0" cellpadding="0" ></table>

     </div> 

    <script>
    // load page and display table data
r(function()
{
    alert('DOM Ready!');
    loadXMLDoc();
    sortTheTable();
});
function r(f){/in/.test(document.readyState)?setTimeout('r('+f+')',9):f()}
function loadXMLDoc() 
{
    if (window.ActiveXObject) 
    { 
        var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
        xmlDoc.async = 'false';
        xmlDoc.load('Linux_Sort.xml');
    }
    else 
    {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() 
        {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
            {
              createTable(xmlhttp);
            }
        };
        xmlhttp.open("GET", "Linux_Sort.xml", false);
        xmlhttp.send();

    } // end else
}
function createTable(xml) 
{
  var i;
  var xmlDoc = xml.responseXML;
  var tableInsert = '<thead><tr><th id="problem_header"><span>Problem Type</span></th><th><span>Task</span></th><th id="page_header"><span>Page No.</span></th><th id="risk_header"><span>Risk</span></th></tr></thead>';
  tableInsert +='<tbody>';
          var x = xmlDoc.getElementsByTagName("record");
          for (i = 0; i <x.length; i++) 
          { 
            tableInsert += '<tr><td class="lalign">' +
            x[i].getElementsByTagName("actionplan")[0].childNodes[0].nodeValue +
            '</td><td class="lalign">' +
            x[i].getElementsByTagName("task")[0].childNodes[0].nodeValue +
            "</td><td>" +
            x[i].getElementsByTagName("pageNo")[0].childNodes[0].nodeValue +
            "</td><td class='risk'>" +
            x[i].getElementsByTagName("risk")[0].childNodes[0].nodeValue +
            "</td></tr>";
          }

     tableInsert += '</tbody>';
    document.getElementById("sortableTable").innerHTML = tableInsert;
    // document.getElementByTagName("tbody").innerHTML = tableInsert;
}
function sortTheTable() 
{
    var newTableObject = document.getElementById("sortableTable")
    sorttable.makeSortable(newTableObject);
}

</script>
</body>
</html>

这里是示例 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Linux xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <record>
        <actionplan> OAv </actionplan>
        <task>something here</task>
        <pageNo>6</pageNo>
        <risk>3</risk>
    </record>
    <record>
        <actionplan>Op</actionplan>
        <task>something here</task>
        <pageNo>7</pageNo>
        <risk>3</risk>
    </record>
    <record>
        <actionplan>Op</actionplan>
        <task>something here</task>
        <pageNo>9</pageNo>
        <risk>2</risk>
    </record>
    <record>
        <actionplan>Op</actionplan>
        <task>something here</task>
        <pageNo>10</pageNo>
        <risk>2</risk>
    </record>
    <record>
        <actionplan>Op</actionplan>
        <task>Disal1 root login via SSH</task>
        <pageNo>12</pageNo>
        <risk>1</risk>
    </record>
    <record>
        <actionplan>Op</actionplan>
        <task>Disable send and accept ICMP redirects</task>
        <pageNo>13</pageNo>
        <risk>1</risk>
    </record>
</Linux>

我的桌子正在工作。但是,我似乎无法对其进行排序。需要注意的是,此信息正在通过本地文件显示,以便在平板电脑浏览器上使用。到目前为止,它只显示在 Firefox 中。

【问题讨论】:

  • 您是否知道使用 ActiveX 会将您的受众限制在支持 ActiveX 的 Windows 计算机和浏览器中?
  • 在 XML 加载完成后触发 sorttable,而不是在页面加载时立即触发。
  • @JimGarrison 您还有其他建议吗?我开了。

标签: javascript xml sorttable.js


【解决方案1】:

将 tbody 置于循环之外:

    var tableInsert = '<thead><tr><th id="problem_header"><span>Problem Type</span></th><th><span>Task</span></th><th id="page_header"><span>Page No.</span></th><th id="risk_header"><span>Risk</span></th></tr></thead>';
          tableInsert +='<tbody>';
          var x = xmlDoc.getElementsByTagName("record");
          for (i = 0; i <x.length; i++) 
          { 
            tableInsert += '<tr><td class="lalign">' +
            x[i].getElementsByTagName("actionplan")[0].childNodes[0].nodeValue +
            '</td><td class="lalign">' +
            x[i].getElementsByTagName("task")[0].childNodes[0].nodeValue +
            "</td><td>" +
            x[i].getElementsByTagName("pageNo")[0].childNodes[0].nodeValue +
            "</td><td class='risk'>" +
            x[i].getElementsByTagName("risk")[0].childNodes[0].nodeValue +
            "</td></tr>";
          }

     tableInsert += '</tbody>';
  1. 也不要忘记在 id 周围加上双引号:

    var newTableObject = document.getElementById("sortableTable")
    
  2. 由于ActiveXObject没有检查readyState的方法,一个乱七八糟的方法是在使用setTimeout函数后调用sortTable

【讨论】:

  • 单击标题行时仍然没有排序。请记住,我正在使用本地文件来展示它。这没有部署在 Web 服务器上。
  • 我现在修正了双引号。谢谢你也抓住了。仍然无法单击标题并进行排序:(
  • 当你尝试 ActiveXObject 时,你在哪里调用 myfuncion()?
  • 你如何确保在 xml 加载后调用 sorttable?
  • 我编辑了问题以合并对 sortTheTable 的单独调用。并使 sortTheTable 成为一个函数。不过还是没有运气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多