Как удалить строки, соответствующие выбранному вводу `да`?

#javascript

#javascript

Вопрос:

 function removeItem(){
     var _table=document.getElementById("test");
     var len=_table.rows.length;
     for(var i=0;i<len;i  ){
        tr=_table.rows[i];
         if(tr.cells[0].firstChild.checked==true){
            tr.parentNode.removeChild(tr);
            }       
        }
    }  
  <table id = "test" border=1px;>
    <tr><td>to_remove</td><td>f1</td><td>f2</td><td>f3</td></tr>
    <tr><td><input  type="radio" name="delete1">yes<input  type="radio" name="delete1">no</td><td>1</td><td>2</td><td>3</td></tr>
    <tr><td><input  type="radio" name="delete2">yes<input  type="radio" name="delete2">no</td><td>4</td><td>5</td><td>6</td></tr>
    <tr><td><input  type="radio" name="delete3">yes<input  type="radio" name="delete3">no</td><td>7</td><td>8</td><td>9</td></tr>
    <tr><td><input  type="radio" name="delete4">yes<input  type="radio" name="delete4">no</td><td>10</td><td>11</td><td>12</td></tr>
    <tr><td><input  type="radio" name="delete5">yes<input  type="radio" name="delete5">no</td><td>20</td><td>11</td><td>12</td></tr>
    <tr><td><input  type="radio" name="delete6">yes<input  type="radio" name="delete6">no</td><td>30</td><td>11</td><td>12</td></tr>
 </table>
 <input type="button" value="remove" onclick="removeItem()">  

В моем js есть некоторые ошибки для удаления строк.
1. В первый раз выбрать две строки для удаления.
введите описание изображения здесь
2.To нажмите удалить, выбранные строки были удалены, после удаления двух строк возникает ошибка. введите описание изображения здесь 3. Во второй раз выбрать две строки для удаления, как и в первый раз.
введите описание изображения здесь
4.To нажмите удалить, была удалена только одна строка, такая же ошибка возникает после удаления одной строки.
введите описание изображения здесь

В моем js-коде есть две ошибки.
ошибка 1: что приводит к ошибке после удаления строки?
Почему tr не определено?
ошибка 2: Почему удаляется только одна строка, когда я выбираю две строки во втором выборе?

Комментарии:

1. Я обновил ваш код ниже. Пожалуйста, взгляните.

Ответ №1:

 function removeItem(){
     var _table=document.getElementById("test");
     var len=_table.rows.length
     for(var i=len-1;i>=0;i--){
        tr=_table.rows[i];
         if(tr.cells[0].firstChild.checked==true){
            tr.parentNode.removeChild(tr);
            }       
        }
    }  
  <table id = "test" border=1px;>
    <tr><td>to_remove</td><td>f1</td><td>f2</td><td>f3</td></tr>
    <tr><td><input  type="radio" name="delete1">yes<input  type="radio" name="delete1">no</td><td>1</td><td>2</td><td>3</td></tr>
    <tr><td><input  type="radio" name="delete2">yes<input  type="radio" name="delete2">no</td><td>4</td><td>5</td><td>6</td></tr>
    <tr><td><input  type="radio" name="delete3">yes<input  type="radio" name="delete3">no</td><td>7</td><td>8</td><td>9</td></tr>
    <tr><td><input  type="radio" name="delete4">yes<input  type="radio" name="delete4">no</td><td>10</td><td>11</td><td>12</td></tr>
    <tr><td><input  type="radio" name="delete5">yes<input  type="radio" name="delete5">no</td><td>20</td><td>11</td><td>12</td></tr>
    <tr><td><input  type="radio" name="delete6">yes<input  type="radio" name="delete6">no</td><td>30</td><td>11</td><td>12</td></tr>
 </table>
 <input type="button" value="remove" onclick="removeItem()">  

просто двигайтесь в противоположном направлении, чтобы оставаться в диапазоне цикла (длина уменьшается каждый раз, когда вы удаляете строку)

Ответ №2:

Могу ли я предложить эту довольно чистую альтернативу, используя while цикл?

 function removeItem(){
  var table=document.getElementById("test");
  var r=table.rows.length-1;
  while(row=table.rows[r--])
  {
    if(row.cells[0].firstChild.checked==true) row.remove();
  }
}  
 <table id = "test" border=1px;>
    <tr><td>to_remove</td><td>f1</td><td>f2</td><td>f3</td></tr>
    <tr><td><input  type="radio" name="delete1">yes<input  type="radio" name="delete1">no</td><td>1</td><td>2</td><td>3</td></tr>
    <tr><td><input  type="radio" name="delete2">yes<input  type="radio" name="delete2">no</td><td>4</td><td>5</td><td>6</td></tr>
    <tr><td><input  type="radio" name="delete3">yes<input  type="radio" name="delete3">no</td><td>7</td><td>8</td><td>9</td></tr>
    <tr><td><input  type="radio" name="delete4">yes<input  type="radio" name="delete4">no</td><td>10</td><td>11</td><td>12</td></tr>
    <tr><td><input  type="radio" name="delete5">yes<input  type="radio" name="delete5">no</td><td>20</td><td>11</td><td>12</td></tr>
    <tr><td><input  type="radio" name="delete6">yes<input  type="radio" name="delete6">no</td><td>30</td><td>11</td><td>12</td></tr>
 </table>
 <input type="button" value="remove" onclick="removeItem()">  

Ответ №3:

Я обновил ваш фрагмент. Поскольку вы удаляете строку во время выполнения цикла, вы должны выполнить цикл с последнего элемента.

 function removeItem(){
     var _table=document.getElementById("test");
     var len=_table.rows.length
     for(var i=len-1;i > 0;i--){
        tr=_table.rows[i];
         if(tr.cells[0].firstChild.checked==true){
            tr.parentNode.removeChild(tr);
            }       
        }
    }  
 <table id = "test" border=1px;>
    <tr><td>to_remove</td><td>f1</td><td>f2</td><td>f3</td></tr>
    <tr><td><input  type="radio" name="delete1">yes<input  type="radio" name="delete1">no</td><td>1</td><td>2</td><td>3</td></tr>
    <tr><td><input  type="radio" name="delete2">yes<input  type="radio" name="delete2">no</td><td>4</td><td>5</td><td>6</td></tr>
    <tr><td><input  type="radio" name="delete3">yes<input  type="radio" name="delete3">no</td><td>7</td><td>8</td><td>9</td></tr>
    <tr><td><input  type="radio" name="delete4">yes<input  type="radio" name="delete4">no</td><td>10</td><td>11</td><td>12</td></tr>
    <tr><td><input  type="radio" name="delete5">yes<input  type="radio" name="delete5">no</td><td>20</td><td>11</td><td>12</td></tr>
    <tr><td><input  type="radio" name="delete6">yes<input  type="radio" name="delete6">no</td><td>30</td><td>11</td><td>12</td></tr>
 </table>
 <input type="button" value="remove" onclick="removeItem()">  

Ответ №4:

Вы можете использовать приведенный ниже код :-

 $("#test").find("td:contains('Yes')").closest('tr').remove();
  

Редактировать 1

 function removeItem()
 {
     $("#test").find("td:contains('Yes')").closest('tr').remove();
 }
  

Правка 2

Или вы можете попробовать

 function checkMatch()
{
    $("#test tr.thisRow").each(function() {
        var thisRow = $(this);
        var match = thisRow.find(".match");

        // note the `==` operator
        if(match.text() == "yes") {
            thisRow.hide(); 
            // OR thisRow.remove();
        }
    });
}
  

Комментарии:

1. не забудьте сослаться jQuery на использование этого кода

Ответ №5:

Просто другое решение http://jsfiddle.net/pmankar/Bnuy7/1064 /

Уменьшите i и len значение, чтобы оно указывало правильно, и оставайтесь в цикле.

 i=i-1;
len = len - 1;