Let’s say we have a table like this:
<table>
<thead>
<tr>
<th class="active">
<input type="checkbox" class="select-all checkbox" name="select-all" />
</th>
<th>A</th>
<th>B</th>
</tr>
</thead>
<tbody>
{% for gene_variant in gene_variant_results %}
<tr>
<td class="active">
<input id="selectedGene" type="checkbox" class="select-item checkbox" name="select-item"/>
</td>
<td>{{ gene_variant.67 }}</td>
<td> {{ gene_variant.72 }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<button id="select-all" class="btn btn-primary">Select all</button>
<button type="submit" id="show-selected" class="btn btn-primary">Show selected</button>
And let’s say that gene_variant_results has for example, 4 results. Each result corresponds to a row (each row has about 100 columns, in this example I only put 11 for illustrative purposes):
(1290, 'chr10', '73498294', '73498294', 'C', 'G', 'exonic', 'CDH23', 'DM', 'CM127233', 'DFNB12) (1291, 'chr11', '73498295', '73498295', 'D', 'H', 'exonic', 'CDH24', 'DM', 'CM127234', 'DFNB13) (1292, 'chr12', '73498296', '73498296', 'E', 'I', 'exonic', 'CDH25', 'DM', 'CM127235', 'DFNB14) (1293, 'chr13', '73498297', '73498297', 'F', 'J', 'exonic', 'CDH26', 'DM', 'CM127236', 'DFNB15)
For example, if I click on the first two checkboxes and then click on the #show-selected button, I would like to store in a JavaScript variable the values of those selected rows. (The full gene_variant content, not just the selected <td> values)
Some illustrative semi pseudo-code of what I want:
$( "#show-selected" ).click(function() {
var selected_checkboxes = //get the full content of each selected row and store it in an array of strings or any other data structure
});
Advertisement
Answer
Whenever your show selected button is clicked first loop through checked checkboxes then use $(this).closest("tr") to get closest tr then loop through whole trs childrens(td) and push value inside some array using .push().
Demo Code :
$("button#show-selected").click(function() {
var outer_array = []
//loop through checked checkboxes
$("tbody input[type=checkbox]:checked").each(function(index, item) {
var inner_array = []
var selector = $(this).closest("tr") //get closest tr
//loop through trs td not first one
selector.find("td:not(:first)").each(function() {
inner_array.push($.isNumeric($(this).text().trim()) ? parseInt($(this).text().trim()) : $(this).text().trim()) //push in inner array
})
outer_array.push(inner_array) //push in outer array
})
console.log(outer_array)
});<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<th class="active">
<input type="checkbox" class="select-all checkbox" name="select-all" />
</th>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
</thead>
<tbody>
<tr>
<td class="active">
<input type="checkbox" class="select-item checkbox" name="select-item" />
</td>
<td>1</td>
<td> 2</td>
<td> abcdsre</td>
</tr>
<tr>
<td class="active">
<input type="checkbox" class="select-item checkbox" name="select-item" />
</td>
<td>12</td>
<td> 22</td>
<td> abcde</td>
</tr>
</tbody>
</table>
<button id="select-all" class="btn btn-primary">Select all</button>
<button type="submit" id="show-selected" class="btn btn-primary">Show selected</button>