0

I need the values for the below TDs in a JavaScript array that I can loop through in another part of my code later on:

 <table>
 <tr><td class="drdsclient">DSCDS201020101</td></tr>
 <tr class="drcheck">
 <td>Maximum online generations:</td>
 <td class="maxonlval notopborder">30</td>
 <td class="maxonlnotes notopborder">notes</td>
 </tr>
 <tr class="drcheck">
 <td>Default Retention Rule set:</td>
 <td class="defretruleval notopborder">No default Retention rule set</td>
 <td class="defretrulenotes notopborder">notes</td>
 </tr>
 <tr class="drcheck">
 <td>Default Backup Schedule set:</td>
 <td class="defschedval notopborder">No default Schedule set</td>
 <td class="defschednotes notopborder">notes</td>
 </tr>
 <tr class="drcheck"> <td class="drdsclient">DSCDS901999102</td></tr>
 <tr class="drcheck">
 <td>Maximum online generations:</td>
 <td class="maxonlval notopborder">29</td>
 <td class="maxonlnotes notopborder">notes</td>
 </tr>
 <tr class="drcheck">
 <td>Default Retention Rule set:</td>
 <td class="defretruleval notopborder">30 days</td>
 <td class="defretnotes notopborder">notes</td>
 </tr>
 <tr class="drcheck">
 <td>Default Backup Schedule set:</td>
 <td class="defschedval notopborder">Monday to Friday @ 21:00</td>
 <td class="defschednotes notopborder">notes</td>
 </tr>
 </table>

Tried the below JS code:

var array = $('.drdsclient').map(function() {
 var $client = $(this);
 var $rows = $client.closest('tr').nextUntil('tr:has(.drdsclient)');
 var obj = { 
 drdsc: $client.text()
 };
 $rows.each(function() { 
 obj['maxonlval'] = $('.drcheck').find('td.maxonlval').text();
 obj['defretruleval'] = $('.drcheck').find('td.defretruleval').text();
 obj['defschedval'] = $('.drcheck').find('td.defschedval').text();
 });
 return obj;
}).get();

But objects are duplicated:

[0]
 [drdsc] => "DSCDS201020101"
 [maxonlval] => "3029"
 [defretruleval] => "No default Retention rule set30 days"
 [defschedval] => "No default Schedule setMonday to Friday @ 21:00"
[1]
 [drdsc] => "DSCDS901999102"
 [maxonlval] => "3029"
 [defretruleval] => "No default Retention rule set30 days"
 [defschedval] => "No default Schedule setMonday to Friday @ 21:00"

Ideally if I can have something like below:

[0]
 [drdsc] => "DSCDS201020101"
 [maxonlval] => "30"
 [defretruleval] => "No default Retention rule set"
 [defschedval] => "No default Schedule set"
[1]
 [drdsc] => "DSCDS901999102"
 [maxonlval] => "29"
 [defretruleval] => "30 days"
 [defschedval] => "Monday to Friday @ 21:00"
asked Mar 31, 2017 at 9:46
4
  • Try replacing $rows.each(function() with $rows.each(function(key, value) then also replace $('.drcheck').find with $(value).find try if that works Commented Mar 31, 2017 at 9:50
  • Blank values: [maxonlval] => "" Commented Mar 31, 2017 at 9:52
  • And what if you do $(key).find? Just curious ;) Commented Mar 31, 2017 at 9:54
  • Nope, still blank values. Commented Mar 31, 2017 at 9:58

1 Answer 1

2

Maybe replace this part

 $rows.each(function() { 
 obj['maxonlval'] = $('.drcheck').find('td.maxonlval').text();
 obj['defretruleval'] = $('.drcheck').find('td.defretruleval').text();
 obj['defschedval'] = $('.drcheck').find('td.defschedval').text();
 });

with

obj['maxonlval'] = $rows.find('td.maxonlval').text();
obj['defretruleval'] = $rows.find('td.defretruleval').text();
obj['defschedval'] = $rows.find('td.defschedval').text();

Note no loop over $rows

answered Mar 31, 2017 at 9:50
Sign up to request clarification or add additional context in comments.

1 Comment

Well that was simple. Thank you

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.