This will work exactly the way you want, as long as not all rows checked, it will delete every checked row, if all checked, the first one will stay undeleted JSFiddle
$("#ADD").click(function(){
$("table").append($("tr:last").clone(true));
$("tr:last input").val("");
});
$("#DEL").click(function(){
var totalRows = $("table tr").length;
var totalRowsChecked = $("table tr input:checked").length;
if(totalRows == totalRowsChecked){
$("table tr:not(:first) input:checked").parents('tr').remove();
}else{
$("table tr input:checked").parents('tr').remove();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<BUTTON ID="ADD">ADD</button>
<BUTTON ID="DEL">DELETE</button>
<TABLE>
<TR>
<TD>
<INPUT TYPE='CHECKBOX' />
</TD>
<TD>
<INPUT TYPE='TEXT' CLASS='MYTEXT'/>
</TD>
<TD>SOMETHING</TD>
</TR>
</TABLE>
UPDATE:
to show an alarm in case of all rows checked this:
$("table tr:not(:first) input:checked").parents('tr').remove();
should be changed into this:
alert("Sorry, cannot delete all rows");