【问题标题】:How to select the previous sibling of last cell which is not null from table, using JQuery如何使用JQuery从表中选择不为空的最后一个单元格的上一个兄弟
【发布时间】:2017-01-31 17:40:02
【问题描述】:

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

<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,在这种情况下是最后一个td,并且在产品列下没有任何数据。我尝试了以下 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 中没有任何数据。有谁知道我做错了什么或如何实现我想要的?

【问题讨论】:

  • 我不明白,您说您正在寻找tr 的索引,但您的选择器只查看tds。 td 的兄弟姐妹将是另一个 td。您在寻找td 还是tr?如果您想要tr,它将是tdparent,而不是sibling
  • 请简化您的问题陈述。
  • @chiliNUT 她想要产品单元之前的索引单元中的值

标签: javascript jquery html html-table siblings


【解决方案1】:

找到非空单元格并从中选择上一个单元格:

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 中查看td,这在其product=name `td` 中没有任何价值。
  • 再次编辑 - 我想我在重新阅读问题后明白你现在在寻找什么。 :)
【解决方案2】:

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

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

如果你想选择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>

【讨论】:

    【解决方案3】:

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

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

    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);
    

    基本上它的作用是找到表格的 tr 并逐行比较以检查第二列 td:eq(1) 以查看原始 HTML 值是否为空(对不起,但我想再次强调它不是非常好的比较方法)并返回值。

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

    希望这会有所帮助。

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多