当前位置: 首页 > 知识库问答 >
问题:

如何从行/列循环中的表单元格提取超链接

谯阳伯
2023-03-14

我有一个JS函数,可以将页面上表格的内容写入CSV文件。

但是,每当我遇到具有超链接的表单元格时(例如,

下面的代码显示了一个循环遍历行和列的函数。我以这种方式创建CSV没有问题,但是我正在努力实现的"check"

<script>
    function downloadCSV() {
        var table = document.getElementById("table-example");

        // Array of rowData arrays
        var results = []; 
        // holds data from each table row
        var rowData;

       //iterate through rows, skipping header 
        for (var i = 1, row; row = table.rows[i]; i++) {
            rowData = [];

            //iterate through columns
            for (var j = 0, col; col = row.cells[j]; j++) {

                // Checking for href and extracing link
                let link = $(this).find('a').attr('href');
                console.log(link);

                if () {
                     ....
                }

                else {
                    rowData.push(col.textContent);
                }   
            }
            results.push(rowData);  
        }

如果需要,示例表为:

<button onClick="downloadCSV()">Download CSV</button>

<table id="table-example">
        <thead>
            <tr>
                <th>Name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><a href="https://www.example.com">Tiger Nixon</a></td>
                <td>System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011/04/25</td>
                <td>$320,800</td>
            </tr>
        </tbody>
</table>

我的目标是实现一个if-else,如果表单元格有,我将向数组中添加href的值,如果没有,则添加html文本。但是,链接变量始终未定义,即使在我知道有

编辑:

根据Taplar的建议,在for循环中使用$(this)是错误的,我想出了以下解决方案:

            for (var j = 0, col; col = row.cells[j]; j++) {

                // Checking for href and extracing link
                var links = col.getElementsByTagName('a');

                if (links.length > 0) {
                    var cellData = links[0].getAttribute('href');
                } else {
                    var cellData = col.textContent;
                }

                rowData.push(cellData);

共有2个答案

端木宏才
2023-03-14

我的解决办法如下:

        for (var j = 0, col; col = row.cells[j]; j++) {

            // Checking for href and extracing link
            var links = col.getElementsByTagName('a');

            if (links.length > 0) {
                var cellData = links[0].getAttribute('href');
            } else {
                var cellData = col.textContent;
            }

            rowData.push(cellData);  
霍浩皛
2023-03-14

我和塔普拉就这件事争论不休。贝娄,我想这就是你要找的。

function downloadCSV() {

  var table = document.getElementById("table-example");

  // Array of rowData arrays
  var results = [];
  // holds data from each table row
  var rowData;

  for (var i = 1; row = table.rows[i]; i++) {
    rowData = [];

    //iterate through columns
    for (var j = 0, col; col = row.cells[j]; j++) {
      var cell = $(row.cells[j]);

      var hashref = cell.find('a');
      // Cause it get a collection
      if (hashref.length > 0 && hashref.length === 1) {
        rowData.push(hashref.attr('href'));
      } else {
        rowData.push(col.textContent);
      }
    } // end for cell
    results.push(rowData);
  } // end row

  console.log(results);

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onClick="downloadCSV()">Download CSV</button>

<table id="table-example">
  <thead>
    <tr>
      <th>Name</th>
      <th>Position</th>
      <th>Office</th>
      <th>Age</th>
      <th>Start date</th>
      <th>Salary</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a href="https://www.example.com">Tiger Nixon</a></td>
      <td>System Architect</td>
      <td>Edinburgh</td>
      <td>61</td>
      <td>2011/04/25</td>
      <td>$320,800</td>
    </tr>
  </tbody>
</table>
 类似资料:
  • 这并不是重复的,尽管这个问题在2011年已经在这个论坛上提出过:从Excel文档中获取超链接URL,2013年用Python从Excel(.xlsx)中提取超链接,2014年用XLRD从Python中的Excel表超链接中获取URL;还是没有答案。在深入研究了xlrd模块之后,data_sheet.hyperlink_map.get((row,col))项似乎会跳转,因为在用Python从Exce

  • 我在以递归方式从循环单链表中删除单个节点/值时遇到了一些问题(当然,如果可能的话)。我的代码只从中间删除,而不是从第一个或最后一个地方删除。 在以递归方式删除其中一个连接后,我不知道如何建立连接。我的意思是,如果我要删除第一个元素,那么我需要将最后一个节点连接到下一个节点。 这是我的代码: 参数和返回: 查找尾部功能:

  • 有人知道从工作簿中的每个工作表中提取某个单元格值的命令吗?或者我可以写一个简单的宏?

  • 我正在尝试编写一个方法,该方法接受整数n,并返回一个新列表,其中包含当前对象list的前n个元素,其顺序与它们在当前列表中出现的顺序相同。 我的解决方案如下: 我知道该方法从声明一个新列表开始。从那里,它声明了“旅行”节点,用于在当前列表中迭代。此外,我相信“最后”只是为了跟踪当前对象中的最后一个节点。 我也理解while循环的第一部分;然而,我不明白为什么有条件 是在场的。当代码第一次执行时,节

  • 我是新来的Python和熊猫,我有一个文本文件(data.txt),其中内容就像。123 456 789 101123 456 789 101 112 113 110 112 123 456 789 101 112 113 110 113 123 456 789 101 112 113 110 110.......................................等,并有一个exce

  • 我正在尝试从表中提取特定的信息,基于哪个单元格被单击。到目前为止,我已经创建了一个可以在单击时工作的函数。问题是它总是返回第一个单元格行的值。 HTML: 如您所见,我尝试了和来启用提取槽ID。这是单击时调用的函数。 和总是从表的第一行返回值,即使我单击第二行、第三行、第四行等。 我如何声明我想要的信息不仅来自第一个,而且来自我单击的行。提前谢谢!