Как удалить дубликаты из DOM?
<div class="alert"> <button type="button" class="close" data-dismiss="alert">×</button> <span>Err1</span> <span>Err3</span> <span>Err2</span> </div> Есть область где отображаются ошибки. Есть массив error с текстами ошибок. В определенных ситуациях данные из массива error переносятся в область. Нужно, чтобы ошибки с одинаковым текстом не дублировались в области. Копаю ф-ию $.unique(arr), но пока не получается. Как запасной варинт $.grep(arr, filter), но он кажется более громоздким |
Я бы добавил в span класс в духе error_"id ошибки". При добавлении проверял существование класса если есть удаляем..
|
Цитата:
|
Цитата:
Цитата:
P.S. Можно сообщения, вообще, не в <span> хранить, а сплошным текстом, и искать в нем совпадения той же indexOf. Т.к. ситуации редкие, то код может быть каким угодно тормозным, главное, чтобы компактно было |
Придумал решение
$('.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>. ')Но так добавляется мусор |
<script src="http://code.jquery.com/jquery-latest.js"></script> <div class="alert"> <button type="button" class="close" data-dismiss="alert">×</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> |
Deff,
можно чуть покороче ... <script src="http://code.jquery.com/jquery-latest.js"></script> <div class="alert"> <button type="button" class="close" data-dismiss="alert">×</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> |
А по-моему длиннее... У меня короче на строчку var obj={};
|
Shitbox2, У рони один цикл - у Вас два.
Опять жа выложите полный вариант скрипта работающего в топике :) |
Цитата:
Рони не указал добавление элементов. for (var i in obj){ $('div.alert').append((obj[i])) };Без этого у него получилось 4 строчки против моих трех Или просто не понял его код... |
Часовой пояс GMT +3, время: 04:45. |