Javascript - 获取所有表格 - > tr值

时间:2012-12-07 12:28:28

标签: javascript html-table

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

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

9 个答案:

答案 0 :(得分:10)

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 reference,其中显示哪些属性可用于遍历DOM的元素。

答案 1 :(得分:9)

没有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);

<强> Working example

答案 2 :(得分:1)

假设您正在使用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();

答案 3 :(得分:1)

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

jQuery('table tr td').each( function( cmp ) { 
    console.log( jQuery(this).text() ); 
} );

答案 4 :(得分:0)

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

<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>

Demo

答案 5 :(得分:0)

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

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

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

见工作demo

答案 6 :(得分: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

找到合适的正则表达式

答案 7 :(得分:0)

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

var rows = document.getElementsByTagName("tbody")[0].rows;
var last = rows[rows.length - 1];
var cell = last.cells[4];
console.log(cell.textContent);

答案 8 :(得分:0)

我想提取所有电子邮件,但我有 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
    }