遍历没有ID的表,存储在数组中供以后使用

时间:2014-10-02 15:55:00

标签: javascript jquery html dom

我会承认,这个问题可能是你最糟糕的噩梦,但我迫切需要帮助。任何提示,技巧,提示或来源都将非常感激。

长话短说,我对jquery的一点知识都没有完成任务...... 我想要做的是捕获表中的数据点(见下文),将它们存储在一个数组中,以便我可以在页面加载期间稍后重新格式化该数据的表示。 问题是这是在当天写回来的(当你查看代码时你不会有多远),因此它没有任何对我有用的ID或类,这使得遍历DOM变得困难。

关于如何使用jquery定位/捕获数据点(通过数据点,我的意思是每个表格单元格中的实际数据)的任何想法?我已经尝试过使用.html(),. text()和.each(),有时这样可行,但有时它会返回我所针对的实际HTML ...我似乎无法找到获取方法只是有组织的数据。

非常感谢您提供的任何帮助。

    //Removed code due to privacy issues

3 个答案:

答案 0 :(得分:1)

也许这可以帮助您获得更清晰的数据。仅从所有td单元格中获取文本内容。我还过滤了那些似乎有 data 的行(那些带有align="right"的行)。

    $('tr[align=right] td').contents().filter(function () {
      return this.nodeType === Node.TEXT_NODE;
    }).map(function () {
      return this.nodeValue;
    }).get();

输出:

["Name", "Type", "Views", "Visitors", "Clicks", "Clickrate", "▲", "Interval", "Conf", "Lift", "Clicks", "Clickrate", "▲", "Interval", "Conf", "Lift", "TOTAL", "632", "516", "8", "1.55%", "0.89%", "-", "-", "3", "0.5814%", "0.55%", "-", "-", "Versions", "Challengers", "301", "250", "2", "0.8%", "0.93%", "-", "-", "1", "0.4%", "0.66%", "-", "-", "Challengers", "331", "266", "6", "2.26%", "1.5%", "91%", "181.95%", "2", "0.7519%", "0.87%", "70%", "87.97%"]

答案 1 :(得分:1)

http://jsfiddle.net/y5r1kq0e/3/

var item = $('tbody')[0].children;

var get = function (item) {
    var t = [];
    $.each(item, function (i) {
        var a = [];
        $.each(item[i].children, function (child) {
            a.push(this.innerText.trim())
        })
        t.push(a.join(' ').trim());
    })
    return t;
}

console.log(get(item))

为你得到一个这样的数组:

0: "Click1 Click2"
1: "Name Type Views Visitors  Clicks Clickrate  ▲ Interval Conf Lift   Clicks Clickrate ▲ Interval Conf Lift"
2: "TOTAL  632 516  8 1.55% ±0.89% - -   3 0.5814% ±0.55% - -"
3: ""
4: "Versions"
5: "V1 Challengers 301 250  2 0.8% ±0.93% - -   1 0.4% ±0.66% - -"
6: "V2 Challengers 331 266  6 2.26% ±1.5% 91% 181.95%   2 0.7519% ±0.87% 70% 87.97%"
7: ""

答案 2 :(得分:0)

尝试将.each()与.text()结合使用。

var datapoints = []
    $("td").each(function(){
    var dataText = $(this).text();
        datapoints.push(dataText);
    });

虽然在这里测试后:http://jsfiddle.net/m33v82qf/看来你需要一些方法告诉.each()函数什么是存储在数组中的有效文本,什么不是。话虽如此,它可以很好地抓取页面上每个单元格的文本。