This might be a simple question, however I tried everything and it didn't work.
I would like to click a button that is on the 3rd td to get the the text of the first td. The HTML code looks like this:
<table>
<tr>
<td>Name</td>
<td>Age</td>
<td>Btton</td>
</tr>
<tr>
<td>Tom</td>
<td>21</td>
<td><input type="button" id="b" value="alert" onclick="alert1();" /></td>
</tr>
</table>
As I mentioned I tried different things, for example
function alert1() {
alert($(this).closest("tr").first().text());
}
However, it alerts with an empty box. Not sure what I am doing wrong.
Thank you for your time.
This might be a simple question, however I tried everything and it didn't work.
I would like to click a button that is on the 3rd td to get the the text of the first td. The HTML code looks like this:
<table>
<tr>
<td>Name</td>
<td>Age</td>
<td>Btton</td>
</tr>
<tr>
<td>Tom</td>
<td>21</td>
<td><input type="button" id="b" value="alert" onclick="alert1();" /></td>
</tr>
</table>
As I mentioned I tried different things, for example
function alert1() {
alert($(this).closest("tr").first().text());
}
However, it alerts with an empty box. Not sure what I am doing wrong.
Thank you for your time.
Share Improve this question asked Sep 19, 2017 at 12:05 DalokeyDalokey 1043 silver badges13 bronze badges 1- $(this).closest("tr").first() selects the first TR in a set of TR.. you could instead do $(this).closest("tr").find("td").first().text() – NachoDawg Commented Sep 19, 2017 at 12:07
6 Answers
Reset to default 6You can use .find, and pass the element that you clicked to the function.
function alert1(elm) {
alert($(elm).closest("tr").find("td:first-child").text());
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>Name</td>
<td>Age</td>
<td>Btton</td>
</tr>
<tr>
<td>Tom</td>
<td>21</td>
<td><input type="button" id="b" value="alert" onclick="alert1(this);" /></td>
</tr>
</table>
Or you could use an event listener in jQuery
$("#b").on('click', function() {
alert($(this).closest("tr").find("td:first-child").text());
})
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>Name</td>
<td>Age</td>
<td>Btton</td>
</tr>
<tr>
<td>Tom</td>
<td>21</td>
<td><input type="button" id="b" value="alert" /></td>
</tr>
</table>
Your first issue is that you're attaching the event handler using onclick
. This means that the this
scope will actually be the window, not the clicked element. To fix this you can use jQuery to attach the event handler, seen as you're using it already.
You can then get the closest('tr')
, and then find()
for the first td
, like this:
$(function() {
$('#b').click(function() {
alert($(this).closest("tr").find('td:first').text());
});
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>Name</td>
<td>Age</td>
<td>Btton</td>
</tr>
<tr>
<td>Tom</td>
<td>21</td>
<td><input type="button" id="b" value="alert" /></td>
</tr>
</table>
You have to pass button reference using this
keyword. And also use $(elm).closest("tr").find("td").first()
to select first td
.
You can do it like following
function alert1(elm) {
alert($(elm).closest("tr").find("td").first().text());
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>Name</td>
<td>Age</td>
<td>Btton</td>
</tr>
<tr>
<td>Tom</td>
<td>21</td>
<td><input type="button" id="b" value="alert" onclick="alert1(this);" /></td>
</tr>
</table>
You have to pass the reference of the <button>
in alert1()
like this alert1(this)
. So that you can use the reference of this button inside alert1()
.
function alert1(_this) {
alert($(_this).closest("tr").find('td:eq(0)').text());
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>Name</td>
<td>Age</td>
<td>Btton</td>
</tr>
<tr>
<td>Tom</td>
<td>21</td>
<td><input type="button" id="b" value="alert" onclick="alert1(this);" /></td>
</tr>
</table>
Or you can also add the click
listner to the <button>
from the JQuery
like this:
$(document).ready(function(){
$('#b').click(function(){
alert($(this).closest("tr").find('td:eq(0)').text());
});
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>Name</td>
<td>Age</td>
<td>Btton</td>
</tr>
<tr>
<td>Tom</td>
<td>21</td>
<td><input type="button" id="b" value="alert" /></td>
</tr>
</table>
You don't need to use the onclick
attribute on the HTML. Also if you have lots of button like this then use a class
selector instead of id
selector which i have used now.
Try this:
function alert1() {
alert($(this).closest("tr:first-child").text());
}
You have nested the button inside the
<td>
tags, so the
<td>
is its parent.
You can therefore do something like:
$("#b").on('click', function(){
var first = $( this ).parent().siblings().first();
console.log(first.text()); //Tom
});