I am trying to change border color of 1st <td>
inside a table / <tr>
if the 2nd <td>
is complete by having the class of .wcpv-order-status-completed
On a page with a couple of <tr>
how can I target only the ones that have order-status-completed?
Tried with jQuery and PHP if-statement
$(document).ready(function(){
$("tr:has(.wcpv-order-status-completed)").css("border", "solid green");
});
Each is setup like this. 2nd td will change either being wcpv-order-status-completed or processing:
<tr>
<th scope="row" class="check-column"><input type="checkbox" name="ids[6]" value="5"></th>
<td class="order_id column-order_id has-row-actions column-primary" data-colname="Booking"><a href="https://example.com/wp-admin/12" class="wcpv-vendor-order-by-id">1528</a><button type="button" class="toggle-row"><span class="screen-reader-text">Vis for flere detaljer</span></button></td>
<td class="order_status column-order_status" data-colname="Booking status"><span class="wcpv-order-status-completed">Gennemført</span></td>
<td class="order_date column-order_date" data-colname="Booking dato">June 5, 2019 9:19 am</td>
<td class="shipping_address column-shipping_address" data-colname="Shipping"></td>
<td class="product_name column-product_name" data-colname="Product"><a class="post-edit-link" href="https://example.com/admin/123"</a></td>
<td class="total_commission_amount column-total_commission_amount" data-colname="Commission"><span class="woocommerce-Price-amount amount">350 <span class="woocommerce-Price-currencySymbol">DKK</span></span></td>
<td class="commission_status column-commission_status" data-colname="Kommission Status"><span class="wcpv-unpaid-status">UBETALT</span></td>
<td class="paid_date column-paid_date" data-colname="Paid Date">0000-00-00 00:00:00</td>
<td class="fulfillment_status column-fulfillment_status" data-colname="Udførselsstatus"><span class="wcpv-fulfilled-status">Opfyldt</span></td>
</tr>
I am trying to have the border on the 1st <td>
which has selector: .vendor td.order_id a
However, the selector above will affect all of the <tr>
s
I expect border color change to green if order status is completed.
You can slightly modify your :has()
selector:
$("tr:has(.wcpv-order-status-completed) td.order_id a").css("border", "solid green");
This will find a <tr>
that has a .wcpv-order-status-completed
. Within that <tr>
, give the order_id
link a green border.
That said, for max efficiency, break it into pieces.
$("tr").has(".wcpv-order-status-completed").find("td.order_id a").css("border", "solid green");
Per the documentation :
Because
:has()
is a jQuery extension and not part of the CSS specification, queries using:has()
cannot take advantage of the performance boost provided by the native DOMquerySelectorAll()
method. For better performance in modern browsers, use$( "your-pure-css-selector" ).has( selector/DOMElement )
instead.
Added to your code, it looks like this:
$("tr").has(".wcpv-order-status-completed").find("td.order_id a").css("border", "solid green");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <tr> <th scope="row" class="check-column"><input type="checkbox" name="ids[6]" value="5"></th> <td class="order_id column-order_id has-row-actions column-primary" data-colname="Booking"><a href="https://example.com/wp-admin/12" class="wcpv-vendor-order-by-id">1528</a><button type="button" class="toggle-row"><span class="screen-reader-text">Vis for flere detaljer</span></button></td> <td class="order_status column-order_status" data-colname="Booking status"><span class="wcpv-order-status-completed">COMPLETED</span></td> <td class="order_date column-order_date" data-colname="Booking dato">June 5, 2019 9:19 am</td> <td class="shipping_address column-shipping_address" data-colname="Shipping"></td> <td class="product_name column-product_name" data-colname="Product"> <a class="post-edit-link" href="https://example.com/admin/123"></a> </td> <td class="total_commission_amount column-total_commission_amount" data-colname="Commission"><span class="woocommerce-Price-amount amount">350 <span class="woocommerce-Price-currencySymbol">DKK</span></span> </td> <td class="commission_status column-commission_status" data-colname="Kommission Status"><span class="wcpv-unpaid-status">UBETALT</span></td> <td class="paid_date column-paid_date" data-colname="Paid Date">0000-00-00 00:00:00</td> <td class="fulfillment_status column-fulfillment_status" data-colname="Udførselsstatus"><span class="wcpv-fulfilled-status">Opfyldt</span></td> </tr> <tr> <th scope="row" class="check-column"><input type="checkbox" name="ids[6]" value="5"></th> <td class="order_id column-order_id has-row-actions column-primary" data-colname="Booking"><a href="https://example.com/wp-admin/12" class="wcpv-vendor-order-by-id">1528</a><button type="button" class="toggle-row"><span class="screen-reader-text">Vis for flere detaljer</span></button></td> <td class="order_status column-order_status" data-colname="Booking status"><span class="">NOT COMPLETED</span></td> <td class="order_date column-order_date" data-colname="Booking dato">June 5, 2019 9:19 am</td> <td class="shipping_address column-shipping_address" data-colname="Shipping"></td> <td class="product_name column-product_name" data-colname="Product"> <a class="post-edit-link" href="https://example.com/admin/123"></a> </td> <td class="total_commission_amount column-total_commission_amount" data-colname="Commission"><span class="woocommerce-Price-amount amount">350 <span class="woocommerce-Price-currencySymbol">DKK</span></span> </td> <td class="commission_status column-commission_status" data-colname="Kommission Status"><span class="wcpv-unpaid-status">UBETALT</span></td> <td class="paid_date column-paid_date" data-colname="Paid Date">0000-00-00 00:00:00</td> <td class="fulfillment_status column-fulfillment_status" data-colname="Udførselsstatus"><span class="wcpv-fulfilled-status">Opfyldt</span></td> </tr> </table>
I created a page with tr tags where some second td tags have the class you mentioned while others don't. At the end, there is a button that makes the validation of which tags has the class.
<!DOCTYPE html> <html> <head> <meta charset = "UTF-8" /> <title>Teste</title> <style> td { width: 100px; text-align: center; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> </head> <body> <table> <tr> <td>1st TD</td> <td class = "wcpv-order-status-completed">2nd TD</td> </tr> <tr> <td>1st TD</td> <td>2nd TD</td> </tr> <tr> <td>1st TD</td> <td>2nd TD</td> </tr> <tr> <td>1st TD</td> <td class = "wcpv-order-status-completed">2nd TD</td> </tr> <tr> <td>1st TD</td> <td class = "wcpv-order-status-completed">2nd TD</td> </tr> </table> <button>Test</button> <script type = "text/javascript"> $(document).ready(function() { $("button").click(function() { $("tr").each(function() { if ($(this).find("td").eq(1).hasClass("wcpv-order-status-completed")) { $(this).find("td").eq(0).css("border", "1px solid green"); } }); }); }); </script> </body> </html>
1st
<td>
inside a<tr>
Select first td
inside tr
:
highLightIfCompleted($table( {
var $rows = $('tr');
$rows.each(function(i,e) {
var $row = $(e);
var $firstTd = $row.find('td:eq(1)');
});
}
if the 2nd
<td>
is complete by having the class of.wcpv-order-status-completed
Check the second TD:
highLightIfCompleted($table( {
var $rows = $('tr');
$rows.each(function(i,e) {
var $row = $(e);
var $firstTd = $row.find('td:eq(0)');
var $secondTd = $row.find('td.eq(1)');
if ($secondTd.hasClass('wcpv-order-status-completed') {
$secondTd.css("border", "solid green");
}
});
}
Example
function highLightIfCompleted() { var $rows = $('tr'); $rows.each(function(i,e) { var $row = $(e); var $firstTd = $row.find('td:eq(0)'); var $secondTd = $row.find('td:eq(1)'); if ($secondTd.hasClass('wcpv-order-status-completed')) { $firstTd.css("border", "solid green"); } }); } setTimeout(highLightIfCompleted, 5000);
.wcpv-order-status-completed { font-weight: bold; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <tr> <td>Row 1 Cell 1</td> <td>Row 1 Cell 2</td> </tr> <tr> <td>Row 1 Cell 1</td> <td class="wcpv-order-status-completed">Row 1 Cell 2</td> </tr> </table>
You need to change the boarder color of the first <td>
of a <tr>
which has other <td>
elements with a specific class.
$('tr').each((i, raw) => {
$(raw).children('td.wcpv-order-status-completed').length > 0
$(raw).children('td').first().css('background-color', 'red');
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.