jQuery 存在图像时仅从 table 单元格中选择文本时出现问题

jQuery problem selecting text only from table cell when there is an image

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

例如 table 看起来像:

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 

当我 select 这样:$(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。

如何在不包括 img 或该行的其余部分的情况下仅将其设置为 select data 1-1

我是 jQuery 的新手,所以我在这方面遇到了困难。抱歉,如果已经有人问过这个问题,我找不到任何相关信息...为了简单起见,我省略了一些代码,但如果您想查看整个函数,请告诉我

更新:回答

感谢 Roko 的帮助,这是用我的完整代码实现的解决方案(我使用 .eq(0) 而不是 tr:eq(0),因为我使用的是 cheerio

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");
        //loop through selected table only where tr = "QA1"
        $('.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");
});

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

示例 获取 TBODY 的第一个 TR :eq(0) 及其第一个 TD :eq(0)

.text()

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>

要获取第二行的第一个单元格,只需使用 tr:eq(1)td:eq(0)。等等