Using jQuery using Closest ("element.class")

I am trying to find the nearest tr that also matches a specific class name. The selector does not return matches. What? I do not understand?

For instance:

<table>
<tbody class="category" id="cat-1">
<tr class="category-head">
  <th>Category 1</th>
</tr>
  <tr class="category-item">
    <th>Item 1</th>
  </tr>
  <tr>
    <td>This is a description of category item 1</td>
  </tr>
  <tr>
    <td><input type="text" name="c1_i1_input" id="c1_i1_input" class="category-item-input" /></td>
  </tr>
   <tr class="category-item">
    <th>Item 2</th>
  </tr>
  <tr>
    <td>This is a description of category item 2</td>
  </tr>
  <tr>
    <td><input type="text" name="c1_i2_input" id="c1_i2_input" class="category-item-input" /></td>
  </tr>
  </tbody>
</table>

<script type="text/javascript">
    $(document).ready(function () {
        $(".category-item-input").change(function () {
           //this works, returning the closest tr
            alert($(this).closest("tr").html());

            //this returns null?
            alert($(this).closest("tr.category-item").html());
        });

    });</script>
+3
source share
1 answer

The closest one finds the closest ancestor element, not the closest one in the DOM. In your case tr, containing the input does not have a class, so the selector does not work. You probably want to find the closest one tr, and then find the previous previous brother of this trwith the class.

$(this).closest('tr').prevAll('tr.category-item:last');
+8
source

Source: https://habr.com/ru/post/1750564/


All Articles