Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удаление отдельного элемента с масива (https://javascript.ru/forum/misc/8631-udalenie-otdelnogo-ehlementa-s-masiva.html)

Suharik 06.04.2010 11:11

Удаление отдельного элемента с масива
 
ВСем доброго времени суток. Возникла такая проблема. Есть 2 функции, одна делаем вывод списка из массива, а другая (при клике) удаляет весь список. Задача удалять конкретные элементы массива а не весь. вот код:
q2000.search.addMetro = function() {
    var self = this;
    var list = document.getElementById('metroList');
    list.innerHTML = '';
    if (metroArr.length > 0) {
        for (var i in metroArr) {
            var li = document.createElement('LI');
           li.innerHTML = metroArr[i];
         list.appendChild(li);
        }
    }
};

q2000.search.clearMetro = function() {
    var self = this;
    var form = document.getElementById('search_obj');
    for (var i in metroArr) {
        document.getElementById("pp"+i).style.display = 'none';
        form.removeChild(document.getElementById("metro_id_"+i));
        $('#metro_item'+i).addClass('selected');
        delete metroArr[i];
    }
    $('#removeM').click();
    self.addMetro();
    self.load();
    return false;
};


Как видно из кода, 1-й блок создает список (если не ошибаюсь) а второй удаляет. Нужна функция которая будет удалять конкретный элемент массива. Помогите плиз))

SkyLight 06.04.2010 11:37

Вы знакомы с delete, который и занимается удалением. А для того, чтобы удалить конкретный элемент массива, вам надо только знать его индекс. Вот и найдите его.

subzey 06.04.2010 12:31

Массива, или HTML-коллекции?

Для первого используйте splice.
Для второго — removeChild

Suharik 06.04.2010 12:33

Понял спасибо. Попробую, Результат скажу

Suharik 06.04.2010 12:39

Цитата:

Сообщение от subzey
Массива, или HTML-коллекции?

В чем разница?
Не пойму как все таки узнать индекс определенного элемента. у меня же там в цикле все выводится li.innerHTML = metroArr[i];. [i] насколько я понимаю и есть индекс. и как в этой ситуации применить splice ?

Suharik 06.04.2010 13:14

Можно немного кода?

e1f 06.04.2010 13:54

Вместо
if (metroArr.length > 0) { 
    for (var i in metroArr) { 
        var li = document.createElement('LI'); 
       li.innerHTML = metroArr[i]; 
     list.appendChild(li); 
    } 
}

лучше сделать
for (var i = metroArr.length; i--; ) {
    var li = document.createElement('LI');
    li.innerHTML = metroArr.splice(i,1);
    list.prependChild(li); 
}

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

Suharik 06.04.2010 14:11

Мда. Тут оказывается простым удалением строки из списка не прокатит. Буду узнавать id конкретного объекта. О результатах скажу

x-yuri 06.04.2010 17:11

Цитата:

Сообщение от SkyLight
Вы знакомы с delete, который и занимается удалением

не надо использовать операторы, предназначенные для Object, тем более что у массивов есть свои средства

Цитата:

Сообщение от Suharik
В чем разница?

в первом нету removeChild, во втором splice


Часовой пояс GMT +3, время: 00:16.