【问题标题】:How to get any specific column data from a table using JavaScript?如何使用 JavaScript 从表中获取任何特定的列数据?
【发布时间】:2017-01-19 17:02:16
【问题描述】:

我有一个从数据库中获取数据的表。在同一张桌子上,我有两个按钮。通过按下任一按钮,我想获取所有特定的列数据。我尝试了几种方法。请参阅下面的代码。

生成上表的 HTML 和 PHP:

    <table class="w3-table-all w3-margin-top" id="myTable">
<tr>
  <th style="width:20%;">Vendor Picture Path</th>
  <th style="width:20%;">Vendor Heading</th>
  <th style="width:20%;">Vendor Adding Date</th>
  <th style="width:20%;">Vendor Body</th>
  <th style="width:10%;">Add A Course</th>
  <th style="width:10%;">Add A Batch</th>
</tr>
<?php

mysql_connect("hist", "user", "pass")or die("cannot connect to server"); 
    mysql_select_db("name")or die("cannot select DB");
    $sql = "query";
    $result = mysql_query($sql);

    while($row=mysql_fetch_assoc($result))
    {
         echo '<tr>
         <td><div style="width:100%;height: 60px;margin: 0;padding: 0;overflow-y: scroll">'.$row["pic_path"].'</div></td>             
         <td><div onclick="getval(this)" class="cventablehead" id="ventablehead" style="width:100%;height: 60px;margin: 0;padding: 0;overflow-y: scroll; cursor: pointer; color:red;">'.$row["heading"].'</div></td>
         <td>'.$row["adding_date"].'</td>
         <td><div style="width:100%;height: 60px;margin: 0;padding: 0;overflow-y: scroll">'.$row["body"].'</div></td>
         <td><button onclick="addcourse(this)">Add</button></td>
         <td><button onclick="addbatch(this)">Add</button></td>
         </tr>';
    }
?>
  </table>
</div>

JavaScript: 每个警报都是我尝试的不同方式,但没有成功

  function addcourse(obj)
  {
    alert(obj.querySelector('#ventablehead').innerHTML);
    alert(obj.getElementsByClassName("cventablehead").innerHTML);
    alert(obj.getElementsByClassName("cventablehead")[0].innerHTML);
  }

【问题讨论】:

  • 这怎么可能行得通?您在 while 循环中使用 same id 创建 multiple 元素,这是一个禁忌。多个元素可以具有相同的类,但不能具有相同的 id。至少解决这个问题。 @Filipe_Duarte's 的回答看起来是在正确的轨道上。您应该为您喜欢的任何答案投票,然后单击解决您问题的答案旁边的复选标记 (√),以表扬他们的帮助。
  • 另外,为什么要使用 JavaScript 来操纵 DOM?为什么不使用 jQuery?它的编写和使用更加方便,代码更加简洁易读。

标签: javascript php mysql


【解决方案1】:

每个 HTML 元素都应该有一个特定的 id:

mysql_connect("hist", "user", "pass")or die("cannot connect to server"); 
mysql_select_db("name")or die("cannot select DB");
$sql = "query";
$result = mysql_query($sql);
$i = 0;

while($row=mysql_fetch_assoc($result))
{
     echo '<tr>
     <td><div style="width:100%;height: 60px;margin: 0;padding: 0;overflow-y: scroll">'.$row["pic_path"].'</div></td>             
     <td><div onclick="getval(this)" class="cventablehead" id="ventablehead_'.$i'" style="width:100%;height: 60px;margin: 0;padding: 0;overflow-y: scroll; cursor: pointer; color:red;">'.$row["heading"].'</div></td>
     <td>'.$row["adding_date"].'</td>
     <td><div style="width:100%;height: 60px;margin: 0;padding: 0;overflow-y: scroll">'.$row["body"].'</div></td>
     <td><button onclick="addcourse('.$i.')">Add</button></td>
     <td><button onclick="addbatch(this)">Add</button></td>
     </tr>';
     $i++;
}
?>
  </table>
</div>


function addcourse(index) {
    alert(document.getElementById('#ventablehead_'+index).innerHTML);
}

【讨论】:

    【解决方案2】:

    为您的按钮添加“单元格内容”属性以指定您要从中获取数据的列:

    <td><button type="button" class="addcourse" cell-content="1">Add</td>
    

    并将监听器附加到您的按钮:

    <script type="text/javascript">
        var btns = document.getElementsByClassName('addcourse');
    
        var findAncestor = function (el, sel) {
            while ((el = el.parentElement) && !((el.matches || el.matchesSelector).call(el,sel)));
            return el;
        };
    
        var getCellContent = function (row, cellIndex) {
            return row.cells[cellIndex].firstChild.innerHTML;
        };
    
        var onClick = function() {
            // Find <tr> ancestor of the clicked button
            var row = findAncestor(this, 'tr');
    
            var data = getCellContent(row, this.getAttribute('cell-content'));
    
            console.log(data);
        };
    
        for (var i = 0; i < btns.length; i++) {
            btns[i].addEventListener('click', onClick, false);
        }
    </script>
    

    【讨论】:

    • 谢谢,但它的显示类似于
      CISCO
      .我怎样才能只得到 innerhtml
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多