Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ограничение кол-ва сообщений на странице (innerHTML)
 
 автор: GлюК   (14.02.2006 в 18:23)   письмо автору
 
 

У меня сообщения выводятся через innerHTML (чат). Надо сделать так, чтобы при появлении нового сообщения, последнее из уже имеющихся на странице исчезало. Т.е на странице всегда должно быть, допустим, 100 сообщений.

   
 
 автор: Axxil   (14.02.2006 в 18:35)   письмо автору
 
   для: GлюК   (14.02.2006 в 18:23)
 

А как сообщения организованы?
довольно просто можно сделать так
блок чата:
<div id='mainblock'></div>
каждое сообщение это тоже блок со своим id
<div id='mess1'></div>
<div id='mess2'></div>
скрипт (схематично)

<script>
function addString(){
  var main = document.getElementById('mainblock');  
  var newStr = document.createElement("div");
  newStr.id='mess1';
  newStr.innerHTML='text';
  // вставляем в начало блока
  main.insertBefore(newStr,main.firstChild);
  // удаляем последнюю строку
  main.removeChild(main.lastChild); 
}
</script>

Естественно ведётся счётчик строчек.
Это всё схематично на коленке. если заинтересует можем досконально разобраться.

   
 
 автор: 12345   (14.02.2006 в 19:34)   письмо автору
 
   для: Axxil   (14.02.2006 в 18:35)
 

Или объединить чат в общий div id=divChat и опрашивать длину массива -

a=document.getElementsByName('divChat').getElementsByTagName('DIV');
if(a.length>100) - удалять ноды в 'divChat' -  removeChild() 
Внутри дива - другие дивы сообщений.

См. док. по DOM:

   
 
 автор: GлюК   (15.02.2006 в 17:22)   письмо автору
 
   для: 12345   (14.02.2006 в 19:34)
 

Идея понятна, буду пробовать! Кстати, как вычислить кол-во div'ов в переменной?

   
 
 автор: Axxil   (15.02.2006 в 17:32)   письмо автору
 
   для: GлюК   (15.02.2006 в 17:22)
 

Главный блок

var main = document.getElementById('mainblock');
Считаем количество строк в нём (divов):

var strings =main.childNodes;
var num = strings.length; 

   
 
 автор: 12345   (15.02.2006 в 20:27)   письмо автору
 
   для: GлюК   (15.02.2006 в 17:22)
 

> как вычислить кол-во div'ов в переменной?
В строке? Сделать поиск: s.find(/<div//ig) , см рег. выражения вS
Но зачем тебе строка, если считаются в объекте так, как я только что привёл?

document.getElementsByName('divChat').getElementsByTagName('DIV').length

Axxill: в твоём варианте надо строго следить за тем, чтобы ни символа лишнего не было между дивами в коде, ни комментария.

   
 
 автор: GлюК   (16.02.2006 в 22:01)   письмо автору
 
   для: 12345   (15.02.2006 в 20:27)
 

Мне в самой обработке надо. Сейчас объясню суть. У меня все сообщения новые записываются в одну переменную (через php) так:

$nov=$nov<div id=..>..новое сообщение..</div>

при это я высчитываю кол-во новых сообщений.
Потом я присваиваю jav'овской переменной значение переменной с новыми сообщениями:

var nov='<?echo"$nov"?>';

Дальше вычитываются сообщения из рабочего фрейма:

bilo=parent.frames.m.ppp.innerHTML;

Соединяю их:

mes=nov+bilo;

А как дальше удалить из них последние n сообщений, где n-ранее высчитанное кол-во новых сообщений???

   
 
 автор: 12345   (17.02.2006 в 02:05)   письмо автору
 
   для: GлюК   (16.02.2006 в 22:01)
 

Это я понял и привёл пример.
В цикле удаляются document.getElementsByName('divChat').childNodes[i].removeChild().

Или document.getElementsByName('divChat').getElementsByTagName('DIV')[i].removeChild()

   
 
 автор: GлюК   (17.02.2006 в 22:44)   письмо автору
 
   для: 12345   (17.02.2006 в 02:05)
 

Во первых, у меня же отправляется в другой фрейм, и просто document не катит, а через parent... не работает. И вообще у меня почему-то не удаляется.(я пробовал в этом же фрейме выводить и уже в нём удалять). А можно так удалять:

document.getElementsByTagName('DIV')[i].removeChild()

т.е. без главного div'a, ведь, если выводить в этом же фрейме, этот див отсутствует!
И ещё: переменная i это элемент массива (число) или же id div'a???

   
 
 автор: 12345   (18.02.2006 в 00:26)   письмо автору
 
   для: GлюК   (17.02.2006 в 22:44)
 

Там 2 фрейма? тогда задача обширнее (хотя ненамного). Давайте решим эту часть с удалением
<div id=divChat>
    <div>*0</div>
    <div>*1</div>
    <div>*2</div>
    <div>*3</div>
    <div>*4</div>
</div>
<input type=button onclick=ff() value=Удалить_ноду_номер><input id=i1 value=3 size=3>
<SCRIPT>
    d=document
ff=function(){o=d.getElementById('divChat');
    if(o.childNodes.length>(v=d.getElementById('i1').value)){
        o.removeChild(o.childNodes(v));
    }else alert(v+' - нет такого номера');
}    
</SCRIPT>
Пример удаляет выбранный номер ноды. Если из другого фрейма надо вставлять, пользуетесь др.методами из спр. по ссылке.

   
 
 автор: GлюК   (19.02.2006 в 17:29)   письмо автору
 
   для: 12345   (18.02.2006 в 00:26)
 

Всем спасибо, я разобрался!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования