Как найти нужный tr td?

<tr>
  <td colspan="2" class="hide-tr name-pnd">Имя</td>
</tr>
<tr>
  <td colspan="2" class="hide-tr search-click">тест</td>
</tr>
<tr>
  <td>Оператор ЭВМ</td>
  <td>dd</td>
</tr>
<tr>
  <td>Оператор ЭВМ</td>
  <td>dd</td>
</tr>
<tr>
  <td>Оператор ЭВМ</td>
  <td>dd</td>
</tr>
<tr>
  <td colspan="2" class="hide-tr name-pnd">Имя 2</td>
</tr>
<tr>
  <td colspan="2" class="hide-tr search-click">тест 2</td>
</tr>
<tr>
  <td>Оператор ЭВМ</td>
  <td>ddd</td>
</tr>
<tr>
  <td colspan="2" class="hide-tr search-click">тест 3</td>
</tr>
<tr>
  <td>Оператор ЭВМ</td>
  <td>ddd</td>
</tr>

Есть таблица, при клике по search-click нужно получить первое ближайшее сверху содержание td с классом name-pnd. Т.е я жму на td с содержанием тест 2 - получаю значение td с содержанием Имя 2, если я жму тест 3 получаю Имя 2 и т.д Как это сделать?


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

$('.search-click').on('click', function() {
  var $prevTr = $(this).parent().prev();      // Предыдущий <tr>
  var $pnd = $prevTr.find('.name-pnd');       // Ищем внутри него `name-pnd`

  while( $prevTr.length && !$pnd.length ) {   // Повторяем, пока не найдем
    $prevTr = $prevTr.prev();
    $pnd = $prevTr.find('.name-pnd');
  }
  
  console.clear();
  console.log( $pnd.text() || "Не найден!" );
});
td { border: 1px solid #999; width: 200px; cursor: pointer; }
.name-pnd { background-color: orange; }
.search-click { background-color: #ddd; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table>
  <tr><td class="search-click">Ошибка</td></tr>
  
  <tr><td class="name-pnd">Цель 1</td></tr>
  <tr><td class="search-click">клик 1</td></tr>
  
  <tr><td class="name-pnd">Цель 2</td></tr>
  <tr><td class="search-click">клик 2</td></tr>
  <tr><td class="search-click">клик 3</td></tr>
  <tr><td class="search-click">клик 4</td></tr>
</table>

→ Ссылка