JQuery - 根据 table 数据隐藏 table 行;
JQuery - Hide table row based on table data;
我知道之前有人问过非常相似的问题,但我一直无法解决任何问题,这可能是由于平台(及其使用的 Jquery 版本)所致;
我有一个显示 table 的网页,目前看起来像这样;
该网页是一个 Dynamics 365 ADX 门户页面,它的实际 HTML 是 Bootstrap 3,只是这个带有一些 Liquid。 (由于 Dynamics 的限制,无法更改 Bootstrap & JQuery 版本)。
table 实际上是嵌入到页面中的 Dynamics 实体视图。
<div class="container">
<div class="page-heading">
<ul class="breadcrumb">
{% for crumb in page.breadcrumbs %}
<li>
<a href="{{ crumb.url }}">{{ crumb.title }}</a>
</li>
{% endfor %}
<li class="active">Company Invoices</li>
</ul>
<div class="row" style="padding-bottom:10px;">
<div class="col-md-12" style="border-bottom:1px solid #eee;">
<h2 class="tab-title">COMPANY INVOICES</h2>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% block main %}
{% include 'Page Copy' %}
{% if page.adx_entitylist %}
{% include 'entity_list' key: page.adx_entitylist.id %}
{% endif %}
{% endblock %}
</div>
</div>
然后清理此网页并按照业务要求呈现它,我在页面上有此 Javascript,它隐藏了 3 列并添加了按钮。
我想做的是,当 'status' 列(隐藏)中的 td 的值为“已取消系统”时,我想隐藏整行。
$(document).ready(function () {
var portalUserId = window["Microsoft"].Dynamic365.Portal.User.contactId;
$(".entitylist.entity-grid").on("loaded", function () {
$('.entitylist').find("th:contains('Status')").hide();
$(this).children(".view-grid").find("tr[data-id]").each(function (i, e){
//debugger;
var id = $(this).attr("data-id");
$(this).find("td[data-attribute='statecode']").hide();
$(this).find("td[data-attribute='statuscode']").hide();
var status = $(this).find("td[data-attribute='statuscode']")[0].innerText;
var amount = $(this).find("td[data-attribute='totalamount']")[0].innerText;
var balance = $(this).find("td[data-attribute='ceda_balancedue']")[0].innerText;
let issue_date = $(this).find("td[data-attribute='ceda_invoiceissuedate']")[0].innerText.split("/");
let due_date = $(this).find("td[data-attribute='duedate']")[0].innerText.split("/");
let today = new Date();
const duedate = new Date(due_date[1] + "/" + due_date[0] + "/" + due_date[2]);
const issuedate = new Date(issue_date[1] + "/" + issue_date[0] + "/" + issue_date[2]);
if ((status == "Canceled") || (status == "Cancelled System")) {
status = "CANCELLED";
$(this).append("<td>CANCELLED</td>");
}else if ((parseFloat(balance.split('$')[1]) < 0.00) || balance.contains("(")) {
status = "CREDIT";
$(this).append("<td>CREDIT</td>");
} else if ((parseFloat(balance.split('$')[1]) > 0.00) && (duedate < today)) {
status = "OVERDUE";
$(this).append("<td style='color:red'>OVERDUE</td>")
} else if ((parseFloat(balance.split('$')[1]) > 0.00) && (duedate => today)) {
status = "OPEN";
$(this).append("<td style='color:blue'>OPEN</td>");
} else if (parseFloat(balance.split('$')[1]) == 0.00) {
status = "PAID";
$(this).append("<td>PAID</td>");
}else if (parseFloat(balance.split('$')[1]) < 0.00 ) {
status = "CREDIT";
$(this).append("<td>CREDIT</td>");
}
//if((status == "BC Posted" || status == "BC Submitted" || status == "BC Submitted Failed" || status == "New") && parseFloat(amount.split('$')[1]) > 0){
if ((status == "OPEN") || (status == "OVERDUE")) {
$(this).append("<td><button class='btn btn-default pay' name = "+ id+","+balance + ">Pay</button></td>");
}
});
});
$('.table').each(function() {
var $status = $(this).find("td").last().prev();
var $row = $status.parent();
if ($status.text() == 'Canceled'){
$row.hide();
} else {
$row.show;
}
});
/* additional code for button handling not displayed */
您似乎正在循环遍历 table 并在找到应取消的行时追加 <td>CANCELLED</td>
:
if ((status == "Canceled") || (status == "Cancelled System")) {
status = "CANCELLED";
$(this).append("<td>CANCELLED</td>");
}
然后你循环查找所有“已取消”的单元格,然后试图隐藏它们的 parent 行:
$('.table').each(function() {
var $status = $(this).find("td").last().prev();
var $row = $status.parent();
if ($status.text() == 'Canceled'){
$row.hide();
} else {
$row.show;
}
});
我认为这第二个循环不是必需的,因为您可以在找到“已取消”的行时隐藏它们:
if ((status == "Canceled") || (status == "Cancelled System")) {
status = "CANCELLED";
$(this).append("<td>CANCELLED</td>");
$(this).hide(); // HIDE PARENT ROW
}
如果您仍想在单独的循环中隐藏,则必须找到 innerText 为“CANCELLED”的所有 <td>
元素(即您之前添加的元素)并隐藏它们parents:
$("td:contains('CANCELLED')").each(function() {
$(this).parent().hide(); // HIDE PARENT ROW
});
我知道之前有人问过非常相似的问题,但我一直无法解决任何问题,这可能是由于平台(及其使用的 Jquery 版本)所致;
我有一个显示 table 的网页,目前看起来像这样;
该网页是一个 Dynamics 365 ADX 门户页面,它的实际 HTML 是 Bootstrap 3,只是这个带有一些 Liquid。 (由于 Dynamics 的限制,无法更改 Bootstrap & JQuery 版本)。 table 实际上是嵌入到页面中的 Dynamics 实体视图。
<div class="container">
<div class="page-heading">
<ul class="breadcrumb">
{% for crumb in page.breadcrumbs %}
<li>
<a href="{{ crumb.url }}">{{ crumb.title }}</a>
</li>
{% endfor %}
<li class="active">Company Invoices</li>
</ul>
<div class="row" style="padding-bottom:10px;">
<div class="col-md-12" style="border-bottom:1px solid #eee;">
<h2 class="tab-title">COMPANY INVOICES</h2>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% block main %}
{% include 'Page Copy' %}
{% if page.adx_entitylist %}
{% include 'entity_list' key: page.adx_entitylist.id %}
{% endif %}
{% endblock %}
</div>
</div>
然后清理此网页并按照业务要求呈现它,我在页面上有此 Javascript,它隐藏了 3 列并添加了按钮。
我想做的是,当 'status' 列(隐藏)中的 td 的值为“已取消系统”时,我想隐藏整行。
$(document).ready(function () {
var portalUserId = window["Microsoft"].Dynamic365.Portal.User.contactId;
$(".entitylist.entity-grid").on("loaded", function () {
$('.entitylist').find("th:contains('Status')").hide();
$(this).children(".view-grid").find("tr[data-id]").each(function (i, e){
//debugger;
var id = $(this).attr("data-id");
$(this).find("td[data-attribute='statecode']").hide();
$(this).find("td[data-attribute='statuscode']").hide();
var status = $(this).find("td[data-attribute='statuscode']")[0].innerText;
var amount = $(this).find("td[data-attribute='totalamount']")[0].innerText;
var balance = $(this).find("td[data-attribute='ceda_balancedue']")[0].innerText;
let issue_date = $(this).find("td[data-attribute='ceda_invoiceissuedate']")[0].innerText.split("/");
let due_date = $(this).find("td[data-attribute='duedate']")[0].innerText.split("/");
let today = new Date();
const duedate = new Date(due_date[1] + "/" + due_date[0] + "/" + due_date[2]);
const issuedate = new Date(issue_date[1] + "/" + issue_date[0] + "/" + issue_date[2]);
if ((status == "Canceled") || (status == "Cancelled System")) {
status = "CANCELLED";
$(this).append("<td>CANCELLED</td>");
}else if ((parseFloat(balance.split('$')[1]) < 0.00) || balance.contains("(")) {
status = "CREDIT";
$(this).append("<td>CREDIT</td>");
} else if ((parseFloat(balance.split('$')[1]) > 0.00) && (duedate < today)) {
status = "OVERDUE";
$(this).append("<td style='color:red'>OVERDUE</td>")
} else if ((parseFloat(balance.split('$')[1]) > 0.00) && (duedate => today)) {
status = "OPEN";
$(this).append("<td style='color:blue'>OPEN</td>");
} else if (parseFloat(balance.split('$')[1]) == 0.00) {
status = "PAID";
$(this).append("<td>PAID</td>");
}else if (parseFloat(balance.split('$')[1]) < 0.00 ) {
status = "CREDIT";
$(this).append("<td>CREDIT</td>");
}
//if((status == "BC Posted" || status == "BC Submitted" || status == "BC Submitted Failed" || status == "New") && parseFloat(amount.split('$')[1]) > 0){
if ((status == "OPEN") || (status == "OVERDUE")) {
$(this).append("<td><button class='btn btn-default pay' name = "+ id+","+balance + ">Pay</button></td>");
}
});
});
$('.table').each(function() {
var $status = $(this).find("td").last().prev();
var $row = $status.parent();
if ($status.text() == 'Canceled'){
$row.hide();
} else {
$row.show;
}
});
/* additional code for button handling not displayed */
您似乎正在循环遍历 table 并在找到应取消的行时追加 <td>CANCELLED</td>
:
if ((status == "Canceled") || (status == "Cancelled System")) {
status = "CANCELLED";
$(this).append("<td>CANCELLED</td>");
}
然后你循环查找所有“已取消”的单元格,然后试图隐藏它们的 parent 行:
$('.table').each(function() {
var $status = $(this).find("td").last().prev();
var $row = $status.parent();
if ($status.text() == 'Canceled'){
$row.hide();
} else {
$row.show;
}
});
我认为这第二个循环不是必需的,因为您可以在找到“已取消”的行时隐藏它们:
if ((status == "Canceled") || (status == "Cancelled System")) {
status = "CANCELLED";
$(this).append("<td>CANCELLED</td>");
$(this).hide(); // HIDE PARENT ROW
}
如果您仍想在单独的循环中隐藏,则必须找到 innerText 为“CANCELLED”的所有 <td>
元素(即您之前添加的元素)并隐藏它们parents:
$("td:contains('CANCELLED')").each(function() {
$(this).parent().hide(); // HIDE PARENT ROW
});