te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - JQuery get the first td by clicking a button on the same row - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - JQuery get the first td by clicking a button on the same row - Stack Overflow

programmeradmin5浏览0评论

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
Add a ment  | 

6 Answers 6

Reset to default 6

You 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
});
发布评论

评论列表(0)

  1. 暂无评论