jQuery问题仅在有图像时从表单元格中选择文本

问题描述 投票:0回答:1

我正在使用jQuery(好吧,cheerio)从html表中抓取数据。我正在尝试显示单元格中具有文本和图像的一列中的数据,但我只希望它显示文本。

例如,表看起来像:

col 1          | col 2     | col 3
---------------------------------------
data 1-1 [img] | data 1-2  | data 1-3 
data 2-1 [img] | data 2-2  | data 2-3 
data 3-1 [img] | data 3-2  | data 3-3 
data 4-1 [img] | data 4-2  | data 4-3 

[当我这样选择:$(this).children().next().text()时,它将输出该行中的所有内容,例如:data 1-1 data 1-2 data 1-3

[当我执行$(this).children().next().html()时它可以工作,但是输出是这样的:data 1-1 <img src="blah.jpg">,显然是因为它在该列中包含图像的html。

如何获取仅选择data 1-1而未包含img或该行的其余部分?

我对jQuery非常陌生,因此一直很难。抱歉,如果已经问过这个问题,我什么都找不到...为了简化起见,我省略了一些代码,但是如果您想查看整个功能,请告诉我]

更新:答案

感谢Roko的帮助,这是使用我的完整代码实现的解决方案:

router.get("/scrape", function(req, res){
    request("http://link-goes-here", function(error, response, html){
        var $ = cheerio.load(html);
        var storeInfo = [];

        $("body > table > tbody > tr > td:nth-child(1) > table").addClass("row");
        $('.row > tbody > tr:contains("QA1")').each(function(i, element){
            var result = {
                "environment" : $(this).children().next().eq(0).text(),
                "store" : $(this).children().next().next().html(),
                "version" : $(this).children().next().next().next().html()
            };
            storeInfo.push(result);
        });
    });
    res.redirect("/stores");
});
html jquery web-scraping html-table cheerio
1个回答
1
投票

您可以使用:eq() selector :eq()获取特定的行索引,而不是特定的单元格索引。

示例获得TBODY的第一个TR .eq() method和它的第一个TD .eq().text()

:eq(0)
:eq(0)

要获得第二行的第一个单元格,只需使用const val = $("#someTable").find("tbody tr:eq(0) td:eq(0)").text(); console.log(val); // "data 1-1" <table id="someTable"> <thead> <tr><th>Col 1</th><th>Col 2</th><th>Col 3</th></tr> </thead> <tbody> <tr><td>data 1-1 <img src="//placehold.it/50x50"></td><td>data 1-2</td><td>data 1-3</td></tr> <tr><td>data 2-1 <img src="//placehold.it/50x50"></td><td>data 2-2</td><td>data 2-3</td></tr> <tr><td>data 3-1 <img src="//placehold.it/50x50"></td><td>data 3-2</td><td>data 3-3</td></tr> <tr><td>data 4-1 <img src="//placehold.it/50x50"></td><td>data 4-2</td><td>data 4-3</td></tr> </tbody> </table> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>。依此类推

© www.soinside.com 2019 - 2024. All rights reserved.