0

我正在动态创建一个列表,我需要能够从表格单元格中检索值。结构是:

<ul id="tester">
<li><div><table><tr><td></td><td id="samecellid">I WANT THIS TD VALUE..
<li><div><table><tr><td></td><td id="samecellid">I WANT THIS TD VALUE..
<li><div><table><tr><td></td><td id="samecellid">I WANT THIS TD VALUE..

每个列表项中都有一个表 - 该表只有一行,因此 td id 在每个列表项中是唯一的,但在整个列表中显然不是。

我遇到的问题是我似乎无法获得 td 单元格的值。我尝试了几种方法,这是我最新的方法,但它不起作用:

if (lengthoflist > 0) {    
    for (i=1; i<=lengthoflist; i++){    

    var ul = document.getElementById("tester");
    var mya = ul.getElementsByTagName("li")[i];                     
    var myb = mya.getElementsByTagName("div");      
    var myc = myb.getElementsByTagName("table");
    var myd = myc.getElementsByTagName("tr");
    var mye = myd.getElementById("samecellid");

    var celldata = mye.innerHTML;
}
}
4

4 回答 4

1

getElementsByTagName返回一个数组,所以最好这样:

if (lengthoflist > 0) {  
    var ul = document.getElementById("tester");

    for (i=1; i<=lengthoflist; i++) {    

        var mya = ul.getElementsByTagName("li")[i];                     
        var myb = mya.getElementsByTagName("div")[0];      
        var myc = myb.getElementsByTagName("table")[0];
        var myd = myc.getElementsByTagName("tr")[0];
        var mye = myd.getElementsByTagName("td")[1]; // the second

        var celldata = mye.innerHTML;
    }
}

但当然,通过 td 标签上的唯一 ID,您可以直接了解它。

于 2012-02-09T18:04:05.570 回答
0

如果您使用了唯一 ID,您可以直接获取它们,而无需沿着 HTML 树向下走:

var mye = myd.getElementById("samecellid");
var myeA = myd.getElementById("samecellidA");
于 2012-02-09T17:59:24.773 回答
0

做这样的事情。

<ul id="tester">
<li><div><table><tr><td></td><td id="samecellid1">I WANT THIS TD VALUE..
<li><div><table><tr><td></td><td id="samecellid2">I WANT THIS TD VALUE..
<li><div><table><tr><td></td><td id="samecellid3">I WANT THIS TD VALUE..

if (lengthoflist > 0) {    
    for (i=1; i<=lengthoflist; i++){
      var mye = document.getElementById("samecellid" + i);

      var celldata = mye.innerHTML;
  }
}
于 2012-02-09T18:02:18.353 回答
0

检索循环中的 li 标签,然后获取每个 li 中的最后一个 td。我稍微修改了您发布的代码。您从 1 开始循环,这意味着您不会检索第一个列表项。数组的索引为 0,因此从 0 开始。在您使用的列表长度中,列表<=末尾将包含一个不存在的元素。

var liTags = document.getElementById("tester").getElementsByTagName('li'); 

for (var i = 0; i < liTags.length; i++) {
    var tdTags = liTags[i].getElementsByTagName('td');
    var celldata = tdTags[tdTags.length - 1].innerHTML; //last td
    console.log(celldata);
}

更新:

这是一种更有效的方法。

var liTags = document.getElementById("tester").getElementsByTagName('li'); 

for (var i = 0; i < liTags.length; i++) {
    var celldata = liTags[i].getElementsByTagName('tr')[0].lastChild.innerHTML;  //last td
    console.log(celldata);
}
于 2012-02-09T18:05:37.120 回答