Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.04.2011, 12:49
Новичок на форуме
Отправить личное сообщение для alex_2017 Посмотреть профиль Найти все сообщения от alex_2017
 
Регистрация: 24.04.2011
Сообщений: 2

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

Прошу вашей помощи в решении проблемы.
Заранее благодарен.
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2011, 13:51
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Во первых
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]);
    }
  }
}


Как то так наверно, не тестил, но суть.
__________________
readOnly
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2011, 14:42
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

можно и без скобок. разницы нет,если аргументы не передаются)

alert( (new Array).constructor.toString() )
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2011, 14:43
Новичок на форуме
Отправить личное сообщение для alex_2017 Посмотреть профиль Найти все сообщения от alex_2017
 
Регистрация: 24.04.2011
Сообщений: 2

Я пробовал без атрибута 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, большое спасибо за участие!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое удаление строк таблицы Tankist Events/DOM/Window 16 03.07.2013 16:42
Умножение численных значений формы ввода FastSP Общие вопросы Javascript 8 08.04.2012 20:45
удаление disabled при нажатии на элемент выпадающего списка deNSe_01 Events/DOM/Window 3 28.01.2011 10:49
Передать несколько значений из JS на сервер, методом POST балерун Общие вопросы Javascript 1 02.03.2010 14:36
Переодическое обновление значений для графика, функция для обновления значений yupa87 Общие вопросы Javascript 0 09.07.2009 14:48