How to get td values in simple way?

Viewed 100

Hi experts here is a snippet:

$('.fa-edit').on('click', function() {
var skill_id = $(this).closest('td').prev('td').attr("id");
var email_id = $('#' + skill_id).closest('td').prev('td').attr("id");
var name_id = $('#' + email_id).closest('td').prev('td').attr("id");
var name  = $('#' + name_id).text();
var email  = $('#' + email_id).text();
var skill  = $('#' + skill_id).text();
alert(name);
 });
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table table-condensed">
<thead>
      <tr>
          <th width="20%" align="left" valign="middle">Name</th>
          <th width="20%" align="left" valign="middle">Email </th>
          <th width="12%" align="left" valign="middle">Expertise</th>      
          <th width="6%" align="right" valign="middle">Action</th>
          <th width="6%" align="left" valign="middle">&nbsp;</th>
      </tr>
</thead>
<tbody>
   <tr> 
      <td align="left" valign="middle" id='dynamic_name_1'>
      Dynamic User1
      </td>
      <td align="left" valign="middle" id='dynamic_email_1'> 
      dynamic_user1@email.com 
      </td>
      <td align="left" valign="middle" id='dynamic_skill_1'>
      Skill1
      </td>
     <td align="right" valign="middle">
     <i class="fa fa-edit" id='90'></i>
     </td> 
  </tr>
</tbody>
</table>

I'm getting the td values for editing in below js. This is working but I want a simple solution for this.

$('.fa-edit').on('click', function() {
var skill_id = $(this).closest('td').prev('td').attr("id");
var email_id = $('#' + skill_id).closest('td').prev('td').attr("id");
var name_id = $('#' + email_id).closest('td').prev('td').attr("id");
var name  = $('#' + name_id).text();
var email  = $('#' + email_id).text();
var skill  = $('#' + skill_id).text();
alert(name);
 });

Please suggest me a very simple method to achieve this. Thanks in advance.

6 Answers

Try this simple solution

var name=$(this).parent().siblings(":nth-child(1)").text();
var email=$(this).parent().siblings(":nth-child(2)").text();
var skill=$(this).parent().siblings(":nth-child(3)").text();
    alert(name);
let values = [];

$('button').click(function()
{
    $('td').each(function()
    {
        values.push($(this).text())
    })
});

console.log(values);

I prefer working with objects/arrays - this way you just push the .text() into an array. You can take it a step further with your keys but if this array is static then you and only need to run this once (or once within the code) then numeric indexes will be faster.

You can use each $(this).closest('tr').find('td') to iterate through td and get the values.

$('.fa-edit').on('click', function() {
  $(this).closest('tr').find('td').each(function(e) {  
    console.log($(this).attr("id"),$(this).text());
  })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table table-condensed">
  <thead>
    <tr>
      <th width="20%" align="left" valign="middle">Name</th>
      <th width="20%" align="left" valign="middle">Email </th>
      <th width="12%" align="left" valign="middle">Expertise</th>
      <th width="6%" align="right" valign="middle">Action</th>
      <th width="6%" align="left" valign="middle">&nbsp;</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td align="left" valign="middle" id='dynamic_name_1'>
        Dynamic User1
      </td>
      <td align="left" valign="middle" id='dynamic_email_1'>
        dynamic_user1@email.com
      </td>
      <td align="left" valign="middle" id='dynamic_skill_1'>
        Skill1
      </td>
      <td align="right" valign="middle">

        <i class="fa fa-edit" id='90'> EDIT</i>
      </td>
    </tr>
  </tbody>
</table>

You can get all the text in an ordered index array like this

$('.fa-edit').on('click', function(e){
    let element = $(e.target);
    let arr = element.parent().siblings().text();
    console.log(arr);
    // this will return as 

    // Dynamic User1               :: arr[0]
    // dynamic_user1@email.com     :: arr[1]
    // Skill1                      :: arr[2]
});

Try This

$('.fa-edit').on('click', function() {
var name= $(this).closest('tr').children('td:eq(0)').text();  
var email= $(this).closest('tr').children('td:eq(1)').text();  
var skill= $(this).closest('tr').children('td:eq(2)').text();  
});

If you have fixed prefix 'dynamic' in your id of td, then you can do something like below.

$('.fa-edit').on('click', function() {
    let answer = [];
    $('[id^="dynamic"]').filter(function() {
        answer.push($(this).text())
    });
    
    alert(answer);
 });
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table table-condensed">
<thead>
      <tr>
          <th width="20%" align="left" valign="middle">Name</th>
          <th width="20%" align="left" valign="middle">Email </th>
          <th width="12%" align="left" valign="middle">Expertise</th>      
          <th width="6%" align="right" valign="middle">Action</th>
          <th width="6%" align="left" valign="middle">&nbsp;</th>
      </tr>
</thead>
<tbody>
   <tr> 
      <td align="left" valign="middle" id='dynamic_name_1'>Dynamic User1</td>
      <td align="left" valign="middle" id='dynamic_email_1'>dynamic_user1@email.com</td>
      <td align="left" valign="middle" id='dynamic_skill_1'>Skill1</td>
     <td align="right" valign="middle">
     <i class="fa fa-edit" id='90'></i>
     </td> 
  </tr>
</tbody>
</table>

Related