Ajax. проверка ответа перед интеграцией в страницу
Здравствуйте,
С сервера приходит определённый дом. Например:
<div class="main-wrapper">
<div>
div1 вложенность 1
<div>
div1 вложенность 2
</div>
</div>
<div>
div2 вложенность 1
<div>
div1 вложенность 2
<div>
div1 вложенность 3
</div>
<div>
div2 вложенность 3
</div>
</div>
</div>
<div>
div3 вложенность 1
</div>
<div>
div4 вложенность 1
</div>
<div>
div5 вложенность 1
</div>
<div>
div6 вложенность 1
</div>
<div>
div7 вложенность 1
</div>
</div>
этот ответ аджаксом подгружается в такую страницу:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<title></title>
</head>
<body>
<div class="main-wrapper">
<div></div>
</div>
<div class="second-wrapper">
<div></div>
</div>
<div class="third-wrapper">
<div></div>
</div>
</body>
</html>
как видно в странице назначения уже есть div с классом main-wrapper задача: 1. проанализировать ответ от сервера (найти div-ы с одинаковыми классами в ответе и странице назначения {в данном примере это .main-wrapper}). 2. удалить из файла назначения блоки с классами, которые встречаются в ответе от сервера (в данном примере это div с классом .main-wrapper) 3. вставить ответ сервера в отредактированную страницу назначения {main-wrapper заранее удалён} Проверку на одинаковые классы нужно проводить только в дочерних элементах body (первой вложенности). колличество таких элементов неограничено. Желательно не использовать циклы. |
Это игра такая? Зачем же отдавать клиенту то, что придется удалять?
|
Цитата:
|
А зачем? Можете пояснить зачем сервер отдает клиенту данные, которые ему не нужны?
|
Цитата:
есть изначально div с классом main-wrapper. внутри него какая-то информация. когда приходит ответ от сервера, в ответе может содержаться такойже див но с другой информацией внутри. задача втасить новую информацию в страницу назначения так чтобы предыдущая удалилась. чтобы не получалось что после append будет 2 одинаковых блока main-wrapper. "в конце должен остаться только один", тот что пришёл от сервера. а устаревший должен затереться :) |
Значит надо не искать и удалять, а заменять содержание новым.
|
Цитата:
вот страница. <div class="class-1"> </div> <div class="class-2"> </div> <div class="class-3"> </div> <div class="class-4"> </div> ответ может приходить разный. иногда вот такой: <div class="sovsem-drugoi-class-1"> </div> <div class="sovsem-drugoi-class-2"> </div> <div class="sovsem-drugoi-class-3"> </div> <div class="class-4"> </div> а может и такой: <div class="class-1"> </div> <div class="class-2"> </div> <div class="class-3"> </div> <div class="class-4"> </div> |
в первом случае одинаковый только четвёртый блок, во втором случае все блоки одинаковые.
И главная страница, не всегда одинаковая, она может состоять из 4х, 5 ..... и так далее блоков |
$.ajax({
url: href,
data: JSON.stringify({"name":"Vasia"}),
type: target,
contentType: 'application/json',
success: function (requestData, status, xhr) {
$(requestData).children('div').each(function(){
id = $(this).uniqueId(); // смотрю все блоки первой вложенности в ответе от сервера.
$(id).remove(); // удаляю у родителя элементы с такими же id
});
$('body').append(requestData); // помещаю ответ сервера в страницу назначения
}
});
пытаюсь сделать вот так. но что-то не работает |
$(requestData).children('div').each(function(){
id = $(this).attr('id'); // беру строкой значение id
$('"#'+id+'"').remove(); // пытаюсь запихнуть в селектор
});
вот так тоже не выходит |
Странно, классы как раз и существуют для того, чтобы можно было определить для целой коллекции элементов единые стили, у вас же они плодятся новыми.
Если честно, то ни черта не понятно, с чего вдруг нечто нужно удалять и по какому принципу. Почему по имени класса, это что означает, что содержание этого элемента повторяется, и, если да, то почему? Что это такое, словами можно описать то, что делаете, без кода? |
Цитата:
Кстати, контент может приходить по АПИ с другого сервера, доступа к которому нет. Классы могут совпадать да и вообще Laimas любитель поиграть в 'почемучку' :) |
Цитата:
вобщем задача решена.
var id = '';
$.ajax({
url: href,
data: JSON.stringify({"name":"Vasia"}),
type: target,
contentType: 'application/json',
success: function (requestData, status, xhr) {
$(requestData).children('div').each(function(){
id = '#'+$(this).attr('id');
$(id).remove();
$('body').append($(this));
});
}
});
|
Цитата:
|
| Часовой пояс GMT +3, время: 13:28. |