PDA

View Full Version : خواندن جمع مقادیر یک فیلد مخفی از جدول با شرط



resident
پنج شنبه 24 خرداد 1403, 18:37 عصر
سلام. وقت بخیر
من جدولی با ساختار زیر دارم





<table id="Itemdatatable" class="table table-striped table-hover">
<thead>
<tr>
<th> ردیف </th>
<th> ستون 1 </th>
<th> ستون 2 </th>
</tr>
</thead>
<tbody>
<tr>
<input id="Items_Index" name="Items.Index" type="hidden" value="0">
<input data-val="true" id="Items_0__Item_InvoiceID" name="Items[0].Item_InvoiceID" type="hidden" value="41446">
<input data-val="true" id="Items_0__Item_StoreID" name="Items[0].Item_StoreID" type="hidden" value="6">
.
.
.
<input id="Items_0__Item_ServicePercentage" name="Items[0].Item_Percentage" type="hidden" value="0">
<td> 1 </td>
<td> AAAAa </td>
<td> bbbb </td>
</tr>


<tr>
<input id="Items_Index" name="Items.Index" type="hidden" value="1">
<input data-val="true" id="Items_1__Item_InvoiceID" name="Items[1].Item_InvoiceID" type="hidden" value="55546">
<input data-val="true" id="Items_1__Item_StoreID" name="Items[1].Item_StoreID" type="hidden" value="13">
.
.
.
<input id="Items_1__Item_ServicePercentage" name="Items[1].Item_Percentage" type="hidden" value="10">
<td> 2 </td>
<td> cccc </td>
<td> ddd </td>
</tr>
.
.
.
</tbody>
</table>


میخوام جمع مقادیر فیلد Item_StoreID رو به دست بیارم که مقدار فیلد Item_Percentage اون ردیف، صفر یا خالی هست. ممنون میشم راهنماییم کنید

resident
جمعه 25 خرداد 1403, 09:53 صبح
حل شد ممنون

mazoolagh
یک شنبه 27 خرداد 1403, 15:36 عصر
سلام. وقت بخیر
من جدولی با ساختار زیر دارم
...
میخوام جمع مقادیر فیلد Item_StoreID رو به دست بیارم که مقدار فیلد Item_Percentage اون ردیف، صفر یا خالی هست. ممنون میشم راهنماییم کنید

سلام و روز خوش
فکر کنم قدیما یک تاپیک مشابه این دیده بودم (پرسش و کدها خیلی شبیه این بود).

1- ادیتور اینجا کدهای html رو درست فرمت نمیکنه، از تگ code یا xml استفاده کنین بجای تگ html:
<table id="Itemdatatable" class="table table-striped table-hover">
<thead>
<tr>
<th> ردیف </th>
<th> ستون 1 </th>
<th> ستون 2 </th>
</tr>
</thead>
<tbody>
<tr>
<input id="Items_Index" name="Items.Index" type="hidden" value="0">
<input data-val="true" id="Items_0__Item_InvoiceID" name="Items[0].Item_InvoiceID" type="hidden"
value="41446">
<input data-val="true" id="Items_0__Item_StoreID" name="Items[0].Item_StoreID" type="hidden" value="6">
.
.
.
<input id="Items_0__Item_ServicePercentage" name="Items[0].Item_Percentage" type="hidden" value="0">
<td> 1 </td>
<td> AAAAa </td>
<td> bbbb </td>
</tr>
<tr>
<input id="Items_Index" name="Items.Index" type="hidden" value="1">
<input data-val="true" id="Items_1__Item_InvoiceID" name="Items[1].Item_InvoiceID" type="hidden"
value="55546">
<input data-val="true" id="Items_1__Item_StoreID" name="Items[1].Item_StoreID" type="hidden" value="13">
.
.
.
<input id="Items_1__Item_ServicePercentage" name="Items[1].Item_Percentage" type="hidden" value="10">
<td> 2 </td>
<td> cccc </td>
<td> ddd </td>
</tr>
.
.
.
</tbody>
</table>

2- گرچه شما مشکل خودتون رو برطرف کردین،
ولی چون اینجا یک انجمن آموزشی هست بهتره که تاپیک رو کامل کنین
شاید در آینده برای کسی که مشکل مشابه داشته باشه سودمند باشه.

3- انتخاب عنوان و تگ مناسب برای کسانی که مشکل مشابه دارن در جستجو کمک میکنه (چه جستجوی خود فروم و چه موتورهای جستجو)

mazoolagh
یک شنبه 27 خرداد 1403, 16:11 عصر
برای کسانی که در آینده ممکنه با مورد مشابه برخورد کنن چند نمونه کد پیوست میکنم.

باید اول مسئله رو به بخش های کوچکتر تقسیم کنیم:
1- انتخاب همه tr هایی که یک input:hidden با value=0 و id (یا name) اونها با Item_ServicePercentage تموم میشه
2- انتخاب همه input:hidden های این tr که id (یا name) اونها با Item_StoreID تموم میشه
3- جمع value همه این inputهای مرحله 2 با هم

این مسئله هم با JavaScript خالص و بدون هیچ کتابخانه و فریمورک (Pure JavaScript یا Vanilla JavaScript) قابل حل هست
و هم با استفاده از کتابخانه jQuery (بطور منطقی چون در این بخش مطرح شده).

1- جاوااسکریپت خالص
let sum = 0;
let inputs = document.querySelectorAll('#Itemdatatable input[id$="Item_ServicePercentage"][value="0"]');
for (i = 0; i < inputs.length; i++) {
let parent = inputs[i].parentElement;
let store = parent.querySelector('input[id$="Item_StoreID"]');
sum += parseInt(store.value);
};

2- جاوااسکریپت خالص
let sum = 0;
document.querySelectorAll('#Itemdatatable input[id$="Item_ServicePercentage"]:not([value="0"])')
.forEach(function (x) {
sum += parseInt(x.parentElement.querySelector('input[id$="Item_StoreID"]').value);
});


3- با استفاده از jQuery
let sum = 0;
$('#Itemdatatable input[id$="Item_ServicePercentage"][value=0]')
.parent()
.find($('input[id$="Item_StoreID"]'))
.each(function () {
sum += parseInt(this.value);
});