#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;