Удаление совпадающих значений
Добрый день.
Пишу скрипт, который при загрузке страницы удаляет все значения из тега 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, время: 11:40. |