Пришла мысль, заметил, что после выполнения:
var elems = document.querySelectorAll('tr>td>input[value=""]');
elems.forEach(input => {
var tr = input.parentNode.parentNode;
if(tr.tagName == 'TR' && tr.parentNode) tr.parentNode.removeChild(tr)
});
Остается:
<tr>--------------------удалить вот это, если
<td></td>
<td>
<table>
<tbody>---------вот тут ничего нет
</tbody>
</table>
</td>
</tr>
Мб имеет смысл в два этапа, первый, что выше и второй найти все пустые <tbody> -? добраться до tr и удалить его.
Что-то типа
var elems = document.querySelectorAll('table>tbody').length == 0;
[].forEach.call(elems, function (el) {console.log("find");
});