12
<table>
  <tr><td>foo</td></tr>
  <tr><td>bar</td></tr>
  <tr><td>abc@yahoo.com</td></tr>
</table>

谁能告诉我如何编写一个 Javascript 行以仅获取下表中的电子邮件地址,我一直在搜索很多,但我遇到的只是在 td 的任一表中使用“id”的教程。我想在没有身份证的情况下做到这一点..请帮忙

4

9 回答 9

23
var rows = document.getElementsByTagName("table")[0].rows;
var last = rows[rows.length - 1];
var cell = last.cells[0];
var value = cell.innerHTML

在这里自己尝试一下:http: //jsfiddle.net/ReyNx/

显然你必须改变document.getElementsByTagName("table")[0]以适当地匹配你的桌子

如果您使用的是 jQuery,它会更容易:

var value = $('table tr:last td').text();

有关更多信息,请参阅MDN DOM 参考,它向您展示了哪些属性可用于遍历 DOM 的哪些元素。

于 2012-12-07T12:33:51.020 回答
14

没有 jQuery,innerHtml或其他邪恶/繁重的功能,只是普通的旧 JavaScript:

// Get the first table in the document.
var table = document.getElementsByTagName('table')[0];
// Get the third row of this table (0-index 3rd = 2)
var emailRow = table.rows[2];
// Get this element's content.
var emailContent = emailRow.firstChild.textContent;

您可以将其写在 1 行中:

var emailContent = document.getElementsByTagName('table')[0].rows[2].firstChild.textContent;

如果您想在表格中查找所有电子邮件地址:

var emails = [];
var table = document.getElementsByTagName('table')[0];
var rows = table.rows;
for (var i = 0; i < rows.length; i++) {
    var rowText = rows[i].firstChild.textContent;
    if (~rowText.indexOf('@')) { // If the content of the row contains a '@' character (This could be replaced with a regex check)
            // Also, I personally prefer to use '~' over '> -1' for indexOf(), but both would work.
        emails.push(rowText);
    }
}
console.log(emails);

工作示例

于 2012-12-07T12:36:06.390 回答
5

如果像我一样,您想从页面上所有表格的所有第一列项目中获取文本,然后使用它。

jQuery('table tr td').each( function( cmp ) { 
    console.log( jQuery(this).text() ); 
} );
于 2017-08-27T15:11:44.627 回答
2

一个简单的方法是给它一个公共类。尝试:

<table>
  <tr><td class="email">foo</td></tr>
  <tr><td class="email">bar</td></tr>
  <tr><td class="email">abc@yahoo.com</td></tr>
</table>

<script>
function getEmail(){
    var email = new Array();
    var arr = document.getElementsByClassName('email');
    for(var i=0; i< arr.length; i++){
        email.push(arr[i].innerHTML);
    }
    alert(email.join(','));
}
</script>

演示

于 2012-12-07T12:34:52.510 回答
2

假设您使用的是 vanilla Javascript(没有 jQuery 等库),并且这是页面上唯一的表格,您可以使用以下代码选择表格中的第三个 tr,然后找出 td 元素包含的内容

var table = document.getElementsByTagName("table")[0];
var emailTr = table.rows[2];
var emailTd = emailTr.cells[0];
var email = emailTd.innerHTML;

jQuery会让这更容易

var email = $("table").children("tr:eq(2)").children("td").html();
于 2012-12-07T12:44:18.180 回答
1

如果您正在使用或计划使用jQuery 库,这是一个解决方案。

鉴于电子邮件始终位于第三行和第一列(如您的示例中),那么您可以执行以下操作:

email = $('table tr:nth-child(3) td:first-child').html();

查看工作演示

于 2012-12-07T12:35:16.403 回答
1

我想提取所有电子邮件,但我有超过 1,000 行和 17 个列/单元格。

我使用了 vanilla js,做了一些调整以获得我想要的输出

    var table = document.getElementsByTagName("table")[0]; //first table
    var rows = table.rows; 
    //loop through rows
    for (var i = 0; i < rows.length; i+=1) {
        var emailTr = rows[i];
        var emailTd = emailTr.cells[2]; //target third column/cell
        var email = emailTd.innerHTML; //get the value
        console.log(email + ', ');

        var node = document.createElement("span"); // create span element
        node.innerHTML = email + ', '; // desired output
        document.body.appendChild(node); // display to document body
    }
于 2021-01-21T11:16:46.590 回答
0

获取所有<tr>元素。遍历每一个并将其innerHTML与匹配电子邮件地址的正则表达式进行比较。

var emailAddresses = [];
var cells = document.getElementsByTagName("td");
for (var i = 0; i < cells.length; i++) {
    if (cells[i].innerHTML.match(/yourEmailRegex/g)) {
        emailAddresses[emailAddresses.length] = cells[i].innerHTML;
    }
}

在这里找到合适的正则表达式http://www.regular-expressions.info/email.html

于 2012-12-07T12:37:14.843 回答
0

在我的情况下,我想要最后一行的第五列值

var rows = document.getElementsByTagName("tbody")[0].rows;
var last = rows[rows.length - 1];
var cell = last.cells[4];
console.log(cell.textContent);
于 2018-12-16T11:59:24.923 回答