Удаление совпадающих значений
Добрый день.
Пишу скрипт, который при загрузке страницы удаляет все значения из тега select, которые встречаются в таблице.
<html>
<body onload="gen_list()">
<fieldset>
<legend>1111</legend>
<table id="List">
<tbody>
<tr id="accomm1" value="1"><td>1</td></tr>
<tr id="accomm2" value="2"><td>2</td></tr>
<tr id="accomm5" value="5"><td>5</td></tr>
<tr id="accomm8" value="8"><td>8</td></tr>
<tr id="accomm33" value="33"><td>33</td></tr>
<tr id="accomm11" value="11"><td>11</td></tr>
<tr id="accomm6" value="16"><td>6</td></tr>
</tbody>
</table>
</fieldset>
<select id="select">
<option id="id33" value="33">33</option>
<option id="id1" value="1">1</option>
<option id="id2" value="2">2</option>
<option id="id8" value="8">8</option>
<option id="id11" value="11">11</option>
<option id="id15" value="15">15</option>
</select>
</body>
</html>
<script>
function gen_list()
{
var idArray = new Array;
var table = document.getElementById('List');
var tableRowCount = table.rows.length;
for(var i = 0; tableRowCount > i; i++)
{
var tableRow = table.rows[i];
var tableRowValue = tableRow.getAttribute('value');
idArray[i] = tableRowValue;
}
var select = document.getElementById('select');
var selectOptionCount = select.options.length;
for(var i = 0; selectOptionCount > i; i++)
{
var selectOption = select.options[i];
var selectOptionValue = selectOption.getAttribute('value');
for(var j = 0; idArray.length > j; j++)
{
if(selectOptionValue == idArray[j])
{
alert(selectOptionValue);
//select.removeChild(selectOption);
}
}
}
}
</script>
В общем скрипт находит все совпадения, но если раскомментировать строку select.removeChild(selectOption), которая и отвечает за удаление, то будут удалены лишь некоторые совпадения. В данном случае не будут удалены 1 и 8. Прошу вашей помощи в решении проблемы. Заранее благодарен. |
Во первых
var idArray = new Array(); Во вторых может не работать потому что атрибут value не валиден для tr Сравнивайте лучше, раз у вас по одной ячейке в ряду и InnerHTML совпадает с tr[value], так
var table = document.getElementById("List");
var select = document.getElementById("select");
for(var i = 0, tlen = table.rows.length; i < tlen; i ++){
for(var j = 0, olen = select.options.length; j < olen; j ++){
if(table.rows[i].cells[0].innerHTML == select.options[i].value){
select.removeChild(select.options[i]);
}
}
}
Как то так наверно, не тестил, но суть. |
можно и без скобок. разницы нет,если аргументы не передаются)
alert( (new Array).constructor.toString() ) |
Я пробовал без атрибута value для tr, парсил id и сравнивал с ним.
Результат был тот же. По все видимости я перемудрил в циклах. Косяк где-то там, но найти его сил уже у меня нет. Решил проблему излишним, но более прозрачным кодом:
function gen_list()
{
var idArray = new Array();
var selectArray = new Array();
var OutherArray = new Array();
var id, accom, selectOption, selectOptionValue;
var table = document.getElementById('List');
var tableRowCount = table.rows.length;
for(var i = 0; tableRowCount > i; i++)
{
var tableRow = table.rows[i];
var tableRowValue = tableRow.getAttribute('value');
idArray[i] = tableRowValue;
}
var select = document.getElementById('select');
var selectOptionCount = select.options.length;
for(var i = 0; selectOptionCount > i; i++)
{
selectOption = select.options[i];
selectOptionValue = selectOption.getAttribute("value");
selectArray[i] = selectOptionValue;
}
var k = 0;
for(var i = 0; selectArray.length > i; i++)
{
for(var j = 0; idArray.length > j; j++)
{
if(selectArray[i] == idArray[j])
{
OutherArray[k] = selectArray[i];
k++;
}
}
}
for(var i = 0; OutherArray.length > i; i++)
{
id = 'id' + OutherArray[i];
selectOption = document.getElementById('id' + OutherArray[i]);
select.removeChild(selectOption)
}
}
Вам, poorking, большое спасибо за участие! |
| Часовой пояс GMT +3, время: 19:02. |