如何使用 JQuery select 来自 table 的最后一个不为空的单元格的前一个兄弟节点

How to select the previous sibling of last cell which is not null from table, using JQuery

我有一个 table 包含以下行和单元格:

<table id='table1'>
  <tr id='row1'>
    <th>index</th>
    <th>Product</th>
    <th>Description</th>
  </tr>
  <tr id='row2' name='row'>
    <td name='index'>1</td>
    <td name='product'>Apples</td>
    <td name='description'>fruits</td>
  </tr>
  <tr id='row3' name='row'>
    <td name='index'>2</td>
    <td name='product'>Bananas</td>
    <td name='description'>fruits</td>
  </tr>
  <tr id='row4' name='row'>
    <td name='index'>3</td>
    <td name='product'>Carrots</td>
    <td name='description'>vegetables</td>
  </tr>
  <tr id='row5' name='row'>
    <td name='index'>4</td>
    <td name='product'></td>
    <td name='description'></td>
  </tr>
</table>

我想 select trindex,在本例中是最后一个 td,并且在 Product Column 下没有任何数据。我尝试使用 JQuery 函数,但它们不起作用: 兄弟方法

 var lastrow=$('td[name=product]:not(:empty):last ~ [name=index]').html();

还有 以前的方法

var lastrow=$('td[name=product]:not(:empty):last').prev().html();

但我无法获得最后一个 tr 的索引号,它的产品标题中没有数据。换句话说,我无法在 tr 中获得 tdname=index,而 tdname=product 中没有任何数据。有谁知道我做错了什么或者我怎样才能实现我想要的?

找到非空单元格和select它的前一个单元格:

var lastCellBeforeCellWithNoData = $('td[name=product]:not(:empty):last').prev('[name=index]');

console.log(lastCellBeforeCellWithNoData.html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id='table1'>
  <tr id='row1'>
    <th>index</th>
    <th>Product</th>
    <th>Description</th>
  </tr>
  <tr id='row2' name='row'>
    <td name='index'>1</td>
    <td name='product'>Apples</td>
    <td name='description'>fruits</td>
  </tr>
  <tr id='row3' name='row'>
    <td name='index'>2</td>
    <td name='product'>Bananas</td>
    <td name='description'>fruits</td>
  </tr>
  <tr id='row4' name='row'>
    <td name='index'>3</td>
    <td name='product'>Carrots</td>
    <td name='description'>vegetables</td>
  </tr>
  <tr id='row5' name='row'>
    <td name='index'>4</td>
    <td name='product'></td>
    <td name='description'></td>
  </tr>
</table>

如果你想获得 tr index 使用这个

var trIndex = $('td[name=product]:empty').parent().index();

否则如果你想要 select name="index" 使用这个

var nameIndex = $('td[name=product]:empty').prev();

var trIndex = $('td[name=product]:empty').parent().index();
var nameIndex = $('td[name=product]:empty').prev().text();

console.log('Tr Index->'+trIndex, ', name="index"->'+nameIndex);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id='table1'>
  <tr id='row1'>
    <th>index</th>
    <th>Product</th>
    <th>Description</th>
  </tr>
  <tr id='row2' name='row'>
    <td name='index'>1</td>
    <td name='product'>Apples</td>
    <td name='description'>fruits</td>
  </tr>
  <tr id='row3' name='row'>
    <td name='index'>2</td>
    <td name='product'>Bananas</td>
    <td name='description'>fruits</td>
  </tr>
  <tr id='row4' name='row'>
    <td name='index'>3</td>
    <td name='product'>Carrots</td>
    <td name='description'>vegetables</td>
  </tr>
  <tr id='row5' name='row'>
    <td name='index'>4</td>
    <td name='product'></td>
    <td name='description'></td>
  </tr>
</table>

在花一些时间理解您的问题后,我认为您正在尝试完成以下操作:返回 "Product" 列不为空的最后一个单元格的索引(注意请尽量不要将其描述为 NULL因为它是数据库存储的一个非常具体的术语)。而且,我认为如果您可以使用 PHP 等其他语言来比较检索到的值是否为 NULL 会更好(因为 NULL 不同于空 space "",试着看看之前的讨论here)

但是为了执行您想要实现的目标,我编写了如下简短代码。

var tr = $('#table1 tr');
var index = 0;
for(i = tr.length - 1; i > 0; i--) {
  if($(tr[i]).find('td:eq(1)').html() != "")  {
    index = i;
    break;
  }
}
console.log(index);

基本上它所做的是找到 table 的 tr 并逐行比较以检查第二列 td:eq(1) 以查看原始 HTML 值是否为空(对不起,但我想再次强调这不是一个很好的比较方法)和 return 值。

我没有根据性能优化代码,但我认为它应该足以实现你想做的事情。

希望这对您有所帮助。

此致。