Home > Software design >  .prev() and .prevAll() requests only return one previous element
.prev() and .prevAll() requests only return one previous element

Time:04-13

So in this case I am trying to get the id of the element with id="current1".

$(document).ready(function() {

  $(".testbutton").on('click', function() {
    var num2 = $(this).prev().val();
    var ID2 = $(this).prev().attr("id");
    var ID1 = $(this).prevAll().attr("id");
    document.write(num2);
    document.write("ID2="   ID2);
    document.write("ID1="   ID1);
  });
});
.testbutton {
  background-color: #ff7b00;
  color: white;
  border-radius: .2em;
  padding: .1em .2em;
  margin-top: 2em;
  border: none;
  cursor: pointer;
  width: 5em;
  font-size: .9em;
}

.testbutton:hover {
  background-color: #924701;
}

.numberinput {
  width: 3em;
  text-align: center;
}


/* Chrome, Safari, Edge, Opera */

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}


/* Firefox */

input[type=number] {
  -moz-appearance: textfield;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<tr id="row1">
  <td >Testrow</td>
  <td><a  id="current1" value="0">0</a></td>
  <td><input type="number" id="num1"  placeholder="0"></input><a type="button"  id="add1">get previous</a></td>
  <td></td>
</tr>

CodePudding user response:

.prev() and .prevAll() only return siblings, but #current1 is not a sibling of .testbutton, since they're in different <td>.

You need to go up a level and get the sibling of the parent.

$(document).ready(function() {

  $(".testbutton").on('click', function() {
    var num2 = $(this).closest("td").prev().find(".currentamount").attr("id");
    console.log(num2);
  });
});
.testbutton {
  background-color: #ff7b00;
  color: white;
  border-radius: .2em;
  padding: .1em .2em;
  margin-top: 2em;
  border: none;
  cursor: pointer;
  width: 5em;
  font-size: .9em;
}

.testbutton:hover {
  background-color: #924701;
}

.numberinput {
  width: 3em;
  text-align: center;
}


/* Chrome, Safari, Edge, Opera */

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}


/* Firefox */

input[type=number] {
  -moz-appearance: textfield;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tr id="row1">
    <td >Testrow</td>
    <td><a  id="current1" value="0">0</a></td>
    <td><input type="number" id="num1"  placeholder="0"><a type="button"  id="add1">get previous</a></td>
    <td></td>
  </tr>
</table>

  • Related