Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Удаление элемента (https://javascript.ru/forum/jquery/9794-udalenie-ehlementa.html)

assasin 06.06.2010 09:44

Удаление элемента
 
Здравствуйте форумчане! Пишу небольшой чат для сайта:
В теле страницы у меня есть
<div id="chat_area"></div>


При добавлении сообщения вызывается функция Load(), которая принимает имя и сообщение и делает следующее:
$js = 'var chat = $("#chat_area");'; // получаем указатель на элемент, потом проходимся по базе сообщений, находим новые, загоняем их в массив и формируем код дальше
foreach ( $messages as $value )
   {
        $id = $value['id'];
	$button = str_replace("recordId",$id,"<input type=image src=images/del.png onclick=Delete('recordId') >");
	$js .= 'chat.append("<span>' . $value['name'] . '&raquo; ' . $value['text'].$button.'</span>");'; 
   }
//после передачи обратно клиенту $js, он выполнит ее eval($js)


По щелчку на кнопку рядом с сообщением вызывается обработчик Delete(Id), который говорит серверу, какую запись из базы удалить...
Теперь собственно вопрос: из базы-то я удаляю, а как удалить эту запись со страницы? Нажал на кнопку - на глазах пользователя сообщение исчезло. Заранее спасибо!

exec 06.06.2010 09:50

$(node).remove();

assasin 06.06.2010 09:53

Не подскажите, как это осуществить на моем конкретном примере?

exec 06.06.2010 09:59

Какой элемент конкретно надо удалить? Или покажите пример исходного кода (HTML) Вашего чата.

assasin 06.06.2010 10:18

На странице, где отображаются сообщения
<div id="chat_area"></div>

Вот смотрите: формирую javascript код на стороне сервера при добавлении нового сообщения
$js = 'var chat = $("#chat_area");'; 
$id = $value['id'];
$button = str_replace("recordId",$id,"<input type=image src=images/del.png onclick=Delete('recordId') >"); // это кнопка, в обработчик которой передается id сообщения в базе данных.
$js .= 'chat.append("<span>' . $value['name'] . '&raquo; ' . $value['text'].$button.'</span>");'; // формируется непосредственно все сообщение: имя, текст, кнопка. 
echo $js; //отправляю

На стороне клиента делаю eval($js);
Когда человек щелкает по кнопке (возле каждого сообщения, как уже понятно, есть такая кнопочка), вызывается обработчик клика Delete(Id), назначенный для каждой кнопки(смотрите выше).
Вот даже его код
function Delete(Id)
{
	$.post("ajax.php",  
	{
        act: "delete",  
        id: Id
    },
     Load );
}

Сервер принимает, смотрит, что $_POST['act'] == "delete" и удаляет с базы данных сообщение по его id. Это все хорошо, но пользователь-то до обновления страницы ничего не заметит(кликнул по кнопке, где-то что-то произошло, видимого визуального эффекта ноль для него). Нужно, чтобы по клику удалились: именно нужное сообщение плюс кнопка(короче, чтобы строка с сообщением исчезла).

exec 06.06.2010 10:25

$('#chat_area span:last').remove();

assasin 06.06.2010 10:46

Задал каждой кнопке уникальный id, который и заносится в element...
Сперва протестировал код
$(element).remove();

Как и ожидалось, удалилась кнопка, по которой был клик...
Потом попробовал
$("#chat_area").remove($(element).parents('span').first());
дабы удалить все сообщение, но такой код вообще никаких действий не производит...

assasin 06.06.2010 14:30

exec, спасибо большое за помощь! Проблему решил, повесил id на каждый span


Часовой пояс GMT +3, время: 14:53.