繁体   English   中英

获取特定数据 <td> 在桌子上

[英]Fetch the data of a particular <td> in a table

我需要获取特定<td>的数据,但没有该特定<td>任何idname 您如何获取该<td>的内容?

例如:

<table>
  <tr><td>name</td><td>praveen</td></tr>
  <tr><td>designation</td><td>software engineer</td></tr>
</table>

是否可以从该表中获取值“名称”。我需要使用javascript提取单词“软件工程师”。

我更喜欢使用jQuery来完成此类任务的所有繁重工作。

例如,以下函数将返回您要搜索的相同类型的下一个元素的文本:

function GetNextChildText(tagToFind, valueToFind) {
    var nextText = "";
    $(tagToFind).each(function(i) {
        if ($(this).text() == valueToFind) {
            if ($(this).next() != null && $(this).next() != undefined) {
                nextText = $(this).next().text();
            }
        }
    });
    return (nextText);
}

因此,对于示例表,返回指定的调用可能是:

var designationText = GetNextChildText('td', 'designation');

结果是变量designationText将包含值“软件工程师”。

快速解决方案:

function GetTdContent(label)
{
  var TDs = document.getElementsByTagName("TD");
  var foundFlag = false;

  for (i = 0; i < TDs.length; i++)
  {
    if (foundFlag) return TDs[i].innerHTML;
    foundFlag = TDs[i].innerHTML.toLower() == label.toLower(); 
  }
}

在其他地方致电:

var value = GetTdContent("designation");

说明:

该函数迭代文档中的所有TD。 如果找到带有给定标签的产品,说“ designation”,它又循环一次,并返回下一个TD内容。

这对您的源HTML做出了一些假设。 如果您知道数据,就足够了。

类似于:
(未经测试,只需快速代码即可提出想法)

var tables = document.getElementById('TABLE'); // instead of document.all.tag
var rows;
var cells;
var maxCells = 1;
var designation;
if (tables) {
    for (var t=0; t<tables.length; t++) {
        rows = tables[t].all.tags('TR');
        if (tables[t].all.tags('TABLE').length == 0) {
            for (var r=0; r<rows.length; r++) {
                if (rows[r].innerText != '') {
                    cells = rows[r].all.tags('TD');
                    for (var c=0; c<cells.length; c++) {
                        if (cells[c].innerText == 'designation' && c<(cells.length-1)) {
                            designation = cells[c+1].innerText;
                        }
                    }
                }
            }
        }
    }
}

由于document.all是特定于IE的,因此您应该使用getElementById,并使用以下内容为IE重新定义该功能

if (/msie/i.test (navigator.userAgent)) //only override IE
{
    document.nativeGetElementById = document.getElementById;
    document.getElementById = function(id)
    {
        var elem = document.nativeGetElementById(id);
        if(elem)
        {
            //make sure that it is a valid match on id
            if(elem.attributes['id'].value == id)
            {
                return elem;
            }
            else
            {
                //otherwise find the correct element
                for(var i=1;i<document.all[id].length;i++)
                {
                    if(document.all[id][i].attributes['id'].value == id)
                    {
                        return document.all[id][i];
                    }
                }
            }
        }
        return null;
    };
}

使用XPath(此处的教程,包括IE和其他浏览器的说明: http : //www.w3schools.com/XPath/xpath_examples.asp

您的示例的xpath是

//表/ TR / TD [文本()= “指定”] /以下:: TD

(“在td后面的td带有文本“名称”,该td在文档中某个表的表中)

可能使用更简单的Xpath-如果它是唯一可以包含“名称”的表单元格,则可以使用

// TD [文本()= “指定”] /以下:: TD

编写代码以执行特定搜索的一个问题是,如果页面结构发生变化,则需要对其进行更改(可能需要进行很大的更改)。 Xpath可能根本不需要更改,如果有更改,则只需一行。

Tomalak更快一点:

<script type="text/javascript">
function getText(tText){
  var tds = document.getElementsByTagName("td");
  for(var i=0, im=tds.length; im>i; i++){
    if(tds[i].firstChild.nodeValue == tText)
      return tds[i].nextSibling.firstChild.nodeValue;
  }
}
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM