Consider:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Foo</td>
<td>
<p>
<span><input type="checkbox" disabled="disabled" checked="checked">1 </span>
<span><input type="checkbox" disabled="disabled"> 2</span>
<span><input type="checkbox" disabled="disabled"> 3</span>
</p>
</td>
</tr>
<tr>
<td>Bar</td>
<td>
<p>
<span><input type="checkbox" disabled="disabled" checked="checked"> A</span>
<input type="checkbox" disabled="disabled"> B
</p>
</td>
</tbody>
</table>
Using jQuery, how do I only keep the <span>
which has an input
with the attribute checked
? Basically, in the end, I only want the following HTML:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Foo</td>
<td>
<p>
<span><input type="checkbox" disabled="disabled" checked="checked">1 </span>
</p>
</td>
</tr>
<tr>
<td>Bar</td>
<td>
<p>
<span><input type="checkbox" disabled="disabled" checked="checked"> A</span>
</p>
</td>
</tbody>
</table>
Note, that for some reason, B
for Bar
intentionally isn't wrapped around <span>
(I didn't write the HTML). Also, assume that the checked inputs will always be within <span>
.
Lastly, I need a one-line jQuery command without (anonymous) functions, since the tool I'm using only supports one-liner jQuery statements. I eventually just want to extract the .text()
of this HTML, hence I want to remove the text whose respective input isn't checked.
The closest I got was something like
$("table").find("p:has(input)").contents().not("span:has(input:not(:checked))").remove().end().html()
(doesn't work)