2013-08-18 6 views
1

В javascript есть два массива: tags[] и tags_java[]. Я использую .splice для удаления определенных элементов, которые имеют один и тот же индекс в двух массивах. tags[] отлично работает, но tags_java нет, кажется, всегда удаляется последний элемент.
Вот код и the jsfiddle link.Почему .splice всегда удаляет последний элемент?

var tag = $(this).text(); 
var index = $.inArray(tag, tags); 
    tags.splice(index,1); 
    tags_java.splice(index,1); 
+0

Можете ли вы предоставить/проверить значение индекса, массива меток и массива tags_java непосредственно перед тем, как выполнить срез на любом из них ..? – abipc

+0

Ваш тэг никогда не находится в массиве - добавленный '×' отображается как часть текста диапазона, поэтому '$ .inArray()' всегда возвращает -1. –

ответ

1

Nah, оба не работают, потому что вы на самом деле не находите правильный индекс своего тега.

Почему нет? Поскольку $(this).text() включает добавленную вами метку удаления, × - например. "Утро ×". Так как это не в вашем массиве tags, index будет -1. tags.splice(-1, 1); удалит 1 элемент из конца массива.

В общем, никогда не рекомендуется использовать текст презентации (т. Е. Текст вашего элемента тега) в качестве данных (например, используя этот текст в качестве значения поиска в массиве). Очень вероятно, что он будет сломан, когда что-то изменится в презентации - как здесь. Таким образом, было бы предложение сохранить данные (что вам нужно искать в тегах) как данные - например. используя предоставленный jQuery API data() - даже если он кажется излишним.

Вот быстрый пример - просто добавление/замена двух линий, которые я пометил с комментариями, начиная с «JT»: JSFiddle

Теперь, вместо того, чтобы смотреть вверх $(this).text(), мы смотрим вверх значение данных «tagValue», хранящееся с $(this).data() - таким образом, значение поиска по-прежнему привязано к элементу, но мы не полагаемся на текст презентации.

+0

Спасибо @ JimmiTh. Но как я могу это исправить? Как я могу обрезать «& times» из текста? –

+0

Вы можете использовать 'var tag = $ (this) .text(); tag = tag.substr (0, tag.length - 1); 'удалить '×', но, как упоминалось во втором абзаце, это очень подвержено ошибкам. Добавление примера к тому, что я имею в виду, сохраняя данные * как * данные. – JimmiTh

+0

Но теперь значение поиска хранится с содержимым « Вторая половина дня ',' Morning ', потому что если я сохраню их как числа, вроде'1,2 .. ', я не знаю, как получить информацию на другой странице. Любые предложения? Спасибо. –