Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.07.2015, 16:52
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Не удаляется элемент из массива.
Здравствуйте.
Проблема в следующем куске кода.
$(function () {
        $(".delete").on("click", function () {
            var item = $(this).parent().attr('id');//Должно быть, есть более лаконичный вариант записи.
            alert(item); //Отобразить id. Для проверки работы функции.
            channel.remove('"' + item + '"');//Удалить элемент из массива, если его значение == значению id.
            displayChannelList();//Вывести список каналов. В данном случае - элементы массива. По работе этой функции я поняла, что элемент массива не удаляется.
        });
    });

Ссылка на jsfiddle

Еще не все функции работают, нет валидации, но если у вас будут какие-либо замечания, касательно остального кода - пишите.
Ответить с цитированием
  #2 (permalink)  
Старый 19.07.2015, 19:56
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Blondinka,
Непонятно, что в переменной channel( по идее это должна быть коллекция jquery ). Метод remove() не удаляет элементы из массива, он удаляет элементы из DOM, читайте документацию http://api.jquery.com/remove/

Последний раз редактировалось Sigizmund2012, 19.07.2015 в 19:59.
Ответить с цитированием
  #3 (permalink)  
Старый 19.07.2015, 20:34
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Спасибо, Sigizmund2012. Заменила remove(). Решила пойти другим путем, воспользовавшись splice() и indexOf(). Работает, но, только, 1 раз.
$(function () {
        $(".delete").on("click", function () {
            var item = channel.indexOf($(this).parent().attr('id'));
            alert(item); //Display id. Remove this code later.
            channel.splice(item,1);
            displayChannelList();
            displayChanges();
        });
    });

Сообщение от Sigizmund2012 Посмотреть сообщение
Blondinka,
... в переменной channel( по идее это должна быть коллекция jquery ).
Что за коллекция?
Ответить с цитированием
  #4 (permalink)  
Старый 19.07.2015, 21:21
Аватар для jasper-blondin
Аспирант
Отправить личное сообщение для jasper-blondin Посмотреть профиль Найти все сообщения от jasper-blondin
 
Регистрация: 11.07.2015
Сообщений: 33

Не хватает контекста. Что такое channel? И какую цель Вы преследуете?
Ответить с цитированием
  #5 (permalink)  
Старый 19.07.2015, 21:36
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

jasper-blondin, channel - это массив, хранящий список rss-каналов.
var channel = [
        'http://rss.cnn.com/rss/edition.rss',
        'http://cosmo.intoday.in.feedsportal.com/c/34156/f/618495/index.rss?',
        'http://www.nasa.gov/rss/dyn/breaking_news.rss'];

Текущая цель - удалить любое количество элементов массива channel без перезагрузки.

Вот весь код.
Ответить с цитированием
  #6 (permalink)  
Старый 19.07.2015, 21:46
Аватар для jasper-blondin
Аспирант
Отправить личное сообщение для jasper-blondin Посмотреть профиль Найти все сообщения от jasper-blondin
 
Регистрация: 11.07.2015
Сообщений: 33

Сообщение от Blondinka Посмотреть сообщение
Работает, но, только, 1 раз.
Кода Вы выполняете данный код (не понятно, зачем):
var item = channel.indexOf($(this).parent().attr('id'));

у Вас item получает одно и то же значение после каждого клика.
Проверьте, может у Вас item больше длины массива. Поэтому удаление больше не происходит.
Ответить с цитированием
  #7 (permalink)  
Старый 19.07.2015, 23:19
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Сообщение от jasper-blondin Посмотреть сообщение
Кода Вы выполняете данный код (не понятно, зачем):
var item = channel.indexOf($(this).parent().attr('id'));
.
Вы хотите предложить альтернативный (не такой громоздкий) вариант?
Ответить с цитированием
  #8 (permalink)  
Старый 20.07.2015, 09:16
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Сообщение от jasper-blondin
у Вас item получает одно и то же значение после каждого клика.
Тут дело не в этом, просто функция update() создаёт новый блок с каналами и все обработчики удаляются. Решается делегированием:
$(function () {
        $(".channelList").on("click", ".delete" , function () {
            var item = channel.indexOf($(this).parent().attr('id'));
            channel.splice(item, 1);
            update();
        });
    });

Сообщение от Blondinka
Что за коллекция?
Вы пытаетесь использовать библиотеку, а не знаете о ней даже базовых вещей. Рекомендую книгу Берб Бибо, Иегуда Кац - "jQuery. Подробное руководство по продвинутому JavaScript", там всё разжёвано. Коллекция jquery в русском издании правда называется "обёрнутый набор".
Ответить с цитированием
  #9 (permalink)  
Старый 20.07.2015, 10:05
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Sigizmund2012, спасибо за решение и за книгу.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбрать элемент массива Dimaz jQuery 1 25.11.2012 19:33
Как переместить элемент массива "на вверх" Solovei95 Общие вопросы Javascript 3 28.01.2012 10:55
Удалить элемент из массива, не убирая с экрана KamalovRadik Javascript под браузер 0 15.10.2011 12:48
Помогите удалить элемент двумерного массива Dorsaj Общие вопросы Javascript 5 18.10.2010 18:49
Как удалить элемент массива? velo Общие вопросы Javascript 2 05.02.2010 15:58