Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.12.2012, 09:33
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Как удалить дубликаты из DOM?
<div class="alert">
    <button type="button" class="close" data-dismiss="alert">&times;</button>
    <span>Err1</span>
    <span>Err3</span>
    <span>Err2</span>
</div>

Есть область где отображаются ошибки. Есть массив error с текстами ошибок. В определенных ситуациях данные из массива error переносятся в область. Нужно, чтобы ошибки с одинаковым текстом не дублировались в области.

Копаю ф-ию $.unique(arr), но пока не получается.

Как запасной варинт $.grep(arr, filter), но он кажется более громоздким
Ответить с цитированием
  #2 (permalink)  
Старый 27.12.2012, 10:21
Аватар для Tek
Tek Tek вне форума
Профессор
Отправить личное сообщение для Tek Посмотреть профиль Найти все сообщения от Tek
 
Регистрация: 22.02.2012
Сообщений: 212

Я бы добавил в span класс в духе error_"id ошибки". При добавлении проверял существование класса если есть удаляем..
Ответить с цитированием
  #3 (permalink)  
Старый 27.12.2012, 10:40
Аспирант
Отправить личное сообщение для skfyann Посмотреть профиль Найти все сообщения от skfyann
 
Регистрация: 27.12.2011
Сообщений: 90

Цитата:
jQuery.unique( array )
arrayThe Array of DOM elements.
А не проще проверять, является ли элемент уникальным при добавлении в этот самый массив?
Ответить с цитированием
  #4 (permalink)  
Старый 27.12.2012, 10:49
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Сообщение от Tek Посмотреть сообщение
Я бы добавил в span класс в духе error_"id ошибки". При добавлении проверял существование класса если есть удаляем..
Не хочу перегружать второстепенный код дополнительными элементами. А учитывая, что тексты ошибок хранятся на сервере, придется id-шники через все скрипты протаскивать. Так что сравнение только по тексту.

Сообщение от skfyann Посмотреть сообщение
А не проще проверять, является ли элемент уникальным при добавлении в этот самый массив?
А вот не знаю... В любом случае, сохраненные элементы хранятся в самом доме (в тегах <span>) и их так же придется вытаскивать для сравнения

P.S. Можно сообщения, вообще, не в <span> хранить, а сплошным текстом, и искать в нем совпадения той же indexOf. Т.к. ситуации редкие, то код может быть каким угодно тормозным, главное, чтобы компактно было

Последний раз редактировалось Shitbox2, 27.12.2012 в 11:01.
Ответить с цитированием
  #5 (permalink)  
Старый 27.12.2012, 13:24
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Придумал решение
$('.alert').find('span').each(function () {
    errors.splice($.inArray(this.innerHTML, errors),1)
})

$.each(errors, function (k, v) {
    $('.alert').append('<span>' + v + '</span>. ')
})

Не очень нравится цикл добавления элемента. Хотелось бы как-то так
$('.alert').append('<span>'+ errors.join('</span>. <span>') + '</span>. ')
Но так добавляется мусор
Ответить с цитированием
  #6 (permalink)  
Старый 27.12.2012, 15:02
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script src="http://code.jquery.com/jquery-latest.js"></script>

<div class="alert">
    <button type="button" class="close" data-dismiss="alert">&times;</button>
    <span>Err1</span>
    <span>Err3</span>
    <span>Err2</span>
    <span>Err3</span>
    <span>Err2</span>
</div>

<script type="text/javascript">
var obj={};
$('div.alert > span:contains("Err")').each(function () {
  obj[$(this).html()]=$(this).remove();
});
for (var i in obj){
 $('div.alert').append((obj[i]))
};
</script>
Ответить с цитированием
  #7 (permalink)  
Старый 27.12.2012, 18:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Deff,
можно чуть покороче ...
<script src="http://code.jquery.com/jquery-latest.js"></script>
<div class="alert">
    <button type="button" class="close" data-dismiss="alert">&times;</button>
    <span>Err1</span>
    <span>Err3</span>
    <span>Err2</span>
    <span>Err3</span>
    <span>Err2</span>
</div>
<script type="text/javascript">
var obj={};
$('div.alert > span:contains("Err")').each(function (i,el) {
  obj[$(el).html()]?$(el).remove():obj[$(el).html()]=!0;
});
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 27.12.2012, 20:46
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

А по-моему длиннее... У меня короче на строчку var obj={};
Ответить с цитированием
  #9 (permalink)  
Старый 27.12.2012, 21:11
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Shitbox2, У рони один цикл - у Вас два.
Опять жа выложите полный вариант скрипта работающего в топике

Последний раз редактировалось Deff, 27.12.2012 в 21:14.
Ответить с цитированием
  #10 (permalink)  
Старый 27.12.2012, 23:57
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Сообщение от Deff Посмотреть сообщение
Shitbox2, У рони один цикл - у Вас два.
Опять жа выложите полный вариант скрипта работающего в топике
Тот код, что выкладывал рабочий. Просто не умею делать так, чтобы его можно было запускать на сайте (как в ваших примерах).
Рони не указал добавление элементов.
for (var i in obj){
 $('div.alert').append((obj[i]))
};
Без этого у него получилось 4 строчки против моих трех
Или просто не понял его код...

Последний раз редактировалось Shitbox2, 28.12.2012 в 00:05.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите как удалить div alex2012 jQuery 5 13.10.2016 17:43
Как удалить элемент таблицы seoneo Элементы интерфейса 2 29.08.2012 18:54
Как загрузить JavaScript после создание DOM? Jeremen Общие вопросы Javascript 6 24.08.2012 21:54
Как в браузерах реализуются функции DOM (например createElement) iamme Общие вопросы Javascript 7 02.09.2011 20:26
Навигация внутри DOM. Как это сделать нормально? master_alf Events/DOM/Window 10 09.04.2010 10:18