Tomato
Tomato

Reputation: 769

Get specific table row data in Jquery

I have a table like this:

<table class="datatable" id="datatable">
    <thead>
        <tr>
            <th>ID</th>
            <th>Shopfront Product ID</th>
            <th>Shopfront Product Name</th>
            <th>Quantity</th>
            <th>Base Price</th>
            <th>Special Price</th>
            <th>Start Date</th>
            <th>End Date</th>
            <th>Action</th>
        </tr>
    </thead>

    <tbody>
        <tr>
            <td>1</td>
            <td>11EA8E6B-346F-00B2-BCFE-023831B74848</td>
            <td>Heineken Lager Sleek 330ml Can 24pk</td>
            <td>1</td>
            <td>2.99</td>
            <td>1.99</td>
            <td></td>
            <td></td>
            <td>
                <button class="accept-btn">Accept</button>
            </td>
            </tr>
            <tr>
                <td>2</td>
                <td>11EA8E6B-346F-00B2-BCFE-023831B74848</td>
                <td>Heineken Lager Sleek 330ml Can 24pk</td>
                <td>6</td>
                <td>15.00</td>
                <td>13.99</td>
                <td>2020-05-31 00:00:00</td>
                <td>2020-06-12 00:00:00</td>
                <td>
                    <button class="accept-btn">Accept</button>
                </td>
            </tr>
            <tr>
                <td>3</td>
                <td>11EA8E6B-346F-00B2-BCFE-023831B74848</td>
                <td>Heineken Lager Sleek 330ml Can 24pk</td>
                <td>24</td>
                <td>37.00</td>
                <td>35.00</td>
                <td></td>
                <td>2020-06-12 00:00:00</td>
                <td>
                    <button class="accept-btn">Accept</button>
                </td>
            </tr>
        </tbody>
</table>

Each row in table have a button to click, I want to get column Shopfront Product ID, Quantity, Special Price, Start Date, End Date value in which row button click. I tried this in Jquery:

$(".accept-btn").click(function() {
    $(this).closest('tr').find('td').each(function() {
        var textval = $(this).text(); 
        console.log(textval.first);
    });
});

But it give me all column data of clicked row. How I can just get specific column like I expected?

Thank you very much

Upvotes: 0

Views: 124

Answers (1)

Maksim Koronchik
Maksim Koronchik

Reputation: 107

You need use textval without .first. Also it will be great to add data-label attribute to each td element. It can helps to serialize all data to one object:

$(".accept-btn").click(function() {
	let data = {};
    $(this).closest('tr').find('td[data-label]').each(function() {
        data[$(this).data('label')] = $(this).text();
    });
    console.log(data);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="datatable" id="datatable">
    <thead>
        <tr>
            <th>ID</th>
            <th>Shopfront Product ID</th>
            <th>Shopfront Product Name</th>
            <th>Quantity</th>
            <th>Base Price</th>
            <th>Special Price</th>
            <th>Start Date</th>
            <th>End Date</th>
            <th>Action</th>
        </tr>
    </thead>

    <tbody>
		<tr>
		    <td data-label="id">1</td>
		    <td data-label="productId">11EA8E6B-346F-00B2-BCFE-023831B74848</td>
		    <td data-label="name">Heineken Lager Sleek 330ml Can 24pk</td>
		    <td data-label="quantity">1</td>
		    <td data-label="price">2.99</td>
		    <td data-label="specialPrice">1.99</td>
		    <td data-label="start"></td>
		    <td data-label="end"></td>
		    <td>
		        <button class="accept-btn">Accept</button>
		    </td>
		</tr>
        <tr>
            <td data-label="id">2</td>
            <td data-label="productId">11EA8E6B-346F-00B2-BCFE-023831B74848</td>
            <td data-label="name">Heineken Lager Sleek 330ml Can 24pk</td>
            <td data-label="quantity">6</td>
            <td data-label="price">15.00</td>
            <td data-label="specialPrice">13.99</td>
            <td data-label="start">2020-05-31 00:00:00</td>
            <td data-label="end">2020-06-12 00:00:00</td>
            <td>
                <button class="accept-btn">Accept</button>
            </td>
        </tr>
        <tr>
            <td data-label="id">3</td>
            <td data-label="productId">11EA8E6B-346F-00B2-BCFE-023831B74848</td>
            <td data-label="name">Heineken Lager Sleek 330ml Can 24pk</td>
            <td data-label="quantity">24</td>
            <td data-label="price">37.00</td>
            <td data-label="specialPrice">35.00</td>
            <td data-label="start"></td>
            <td data-label="end">2020-06-12 00:00:00</td>
            <td>
                <button class="accept-btn">Accept</button>
            </td>
        </tr>
    </tbody>
</table>

Upvotes: 1

Related Questions