Как отобразить содержимое closest на javascript?

#javascript #html #jquery

Вопрос:

Я искал везде, но мой код вообще не работает. Я просто хочу отобразить содержимое td, на который я нажимаю.

У меня есть этот стол:

 <tr class='rowData' tooltip='{caracteristicas}'>
  <td nowrap class='Body'><a href='{caracteristicas}' target="_blank" style="color:black" onClick='return confirm("VOCÊ SERÁ REDIRECIONADO PARA:rr {caracteristicas}")'>{inputDescItem}</a></td>
  <td nowrap class='Body' align='right'>{quantidade} {hiddenCodigoItem}</td>
  <td nowrap class='Body' align='center'>{grupoEstoque}</td>
  <td nowrap class='Body' align='center'>{inputCodigoItem}</td>
  <td nowrap class='Body' align='center'>{btnAtualizaItem}</td>
  <td nowrap class='Body' align='center'><button type="button" class="btnTest">Assign</button></td>
  <td nowrap class='Body' align='center' class="testNameClass" name="output" style="display:none;">{caracteristicas}</td>
</tr>

 

Я хочу, чтобы при нажатии на тег CLICK ME он отображал (во всплывающем окне, предупреждении, модальном или любом другом) содержимое тега ниже (который я не отображаю).

У меня есть следующий javascript:

 $("btnTest").on("click", function() {
  alert($(this).closest('tr').find('testNameClass').val());
});
 

Я не очень хорошо разбираюсь в JS, так что, пожалуйста, полегче со мной.

Комментарии:

1. В вашем html-коде нет тега «Нажмите на меня». Можете ли вы обновить детали

Ответ №1:

Похоже, вам не хватает $(«.btnTest») вместо $(«btnTest») и просто попробуйте

 $(".btnTest").on("click", function() {
alert($(this).parents('tr').find('.testNameClass').val());
});
 

Комментарии:

1. я только что попробовал,я получаю «неопределенный» результат, несмотря ни на что

Ответ №2:

Чтобы настроить таргетинг на конкретные элементы с помощью a class , вам нужно использовать точку перед именем класса. В вашем случае .btnTest И. .testNameClass

 $(".btnTest").on("click", function() {
 alert($(this).closest('tr').find('.testNameClass').text());
});
 

Поскольку вы ищете текст внутри элемента td, вы должны использовать .text() вместо .val()

В приведенном ниже примере столбец ent_3 скрыт, и вы получите его значения с помощью упомянутого выше скрипта.

 $(".btnTest").on("click", function() {
  alert($(this).closest('tr').find('.testNameClass').text());
});
  
 .testNameClass {
  display: none;
}
table {
    border-collapse: collapse;
}
th, td { border: 1px solid #000; padding: 10px; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table class="table table-bordered" id="dataTable">
    <thead>
        <tr>
            <th>pk</th>
            <th>ent_1</th>
            <th>ent_2</th>
            <th>ent_3</th>
        </tr>
    </thead>
    <tbody>
      <tr>
          <td>PK Row 0</td>
          <td>Ent_1</td>
          <td><button type="button" class="btnTest">Assign</button></td>
          <td class="testNameClass">Row 0 Ent_3</td>
      </tr>
      <tr>
          <td>PK Row 1</td>
          <td>Ent_1</td>
          <td><button type="button" class="btnTest">Assign</button></td>
          <td class="testNameClass">Row 1 Ent_3</td>
      </tr>
      <tr>
          <td>PK Row 2</td>
          <td>Ent_1</td>
          <td><button type="button" class="btnTest">Assign</button></td>
          <td class="testNameClass">Row 2 Ent_3</td>
      </tr>
    </tbody>
</table> 

Ответ №3:

Вашему методу будет передана ссылка на MouseEvent то, что представляет собой подробную информацию о клике. Поскольку это an Event , у него есть a currentTarget , который представляет «элемент» в так называемом DOM … внутренняя структура данных, которая представляет HTML. Эта структура данных имеет форму дерева, где каждый узел имеет одного родителя, двух братьев и сестер и нескольких детей. Теперь вы можете написать код, чтобы «подниматься по дереву», пока не встретите td узел. Первое, к чему вы приходите, — это самое сокровенное, содержащее td .

Ответ №4:

Я думаю, что вы неправильно ориентируетесь на использование a . перед именем класса — также я вижу два класса в одном элементе, я настроил это для вас здесь, посмотрите

https://jsfiddle.net/hw0ansyj/1/

 $(".btnTest").on("click", function() {
    alert($('.testNameClass').html());
});