Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как загрузить html в переменую и распарсить по дивам? (https://javascript.ru/forum/jquery/37122-kak-zagruzit-html-v-peremenuyu-i-rasparsit-po-divam.html)

Kvark 08.04.2013 15:30

Как загрузить html в переменую и распарсить по дивам?
 
Всем привет, надеюсь на помощь гуру - не получаеться разобраться самому :(

есть файлик по структуре такой:
<div id="msg_1">
   <div class="time1">
      12:00
   </div>
   <div class="time2">
      13:00
   </div>
   <div class="msg">
       Обедать
   </div>
</div>
...
<div id="msg_N">
   ...
</div>


хочу в переменые собрать значения из этих тэгов. (могут присутсвовать стили и другие тэги)

вот мой код:
function showMsg()
{ 		
	$.get('msg.txt', function(data) 
		{
			var fileMsg1 = "";
			var fileMsg2 = "";
			fileMsg1 = $(data).filter('#msg_1').html();
			fileMsg2 = $(fileMsg1).filter('.msg').html();
			
		}	
};

В fileMsg1 получаю содержимое дива msg_1 как и ожидаю, а вот в fileMsg2 - пусто - что я не так делаю?
Еще заковырка - зарание не извесно сколько собщений, как можно сосчитать количество div id в переменной?

Kvark 08.04.2013 20:34

упд. додумался вот так сделать:
$.get('msg.txt', function(data) 
	{
		var fileMsg = $(data).filter('#msg_1').find('.msg').html();
		var msgshowtime = $(data).filter('#msg_1').find('.time1').html();
		var msghidetime = $(data).filter('#msg_1').find('.time2').html();
	}

вроде хорошо получилось, а вот как можно сосчитать количество дивов определенного формата ид
<div id="msg_1"></div>
<div id="msg_2"></div>
<div id="msg_3"></div>
<div id="msg_4"></div>

сосчитать = 4?

ненайду никак, :( может кто что посоветует?

tsigel 09.04.2013 09:23

$('div').length

Kvark 09.04.2013 12:01

или я не понял или плохо объяснил, я загружаю даные в переменную, мне нужно их обработать, обработчик уже работает, но его нужно преминить к каждому див в переменной с определным ид, сколько их будет в файле зарание не известно, вопрос как именно сосчитать не все дивы а именно секционые тоесть те у которых ид = msg_1, msg_2, msg_..., msg_N

tsigel 09.04.2013 12:05

var num = 0;
$('div').each(function () {
  var id = $(this).attr('id');
  if (id.test(/msg_/)) num++;
});


В синтаксисе test не уверен (не помню точно), но суть ясна.

Kvark 09.04.2013 12:29

ок, спасибо, идею понял, вот только как такое применить к переменной в которой хтмл код?

tsigel 09.04.2013 12:33

Если этот код лежит в переменной и это строка то это ещё проще:
var str = /*Ваша строка*/;
var array = str.split('msg_');//Превращаем строку в массив, разбивая члены массивов вашим идентификатором
var num = array.length; //длинна этого массива и будет количеством дивов

Kvark 09.04.2013 12:41

отлично! Работает, хоть и возращает на единицу больше, но это поправимо, спасибо

Kvark 09.04.2013 13:13

Еще вопрос по тому же самому, а как можно разбить сообщение в массив без обрамляющего тега <div id="msg_1">? то есть чтобы элементы массива были содержание этого дива, но не он сам?

tsigel 09.04.2013 13:23

Тут 2 основных пути:
1) Регулярные выражения и возможно пользование split
2) Использование методов replace и split;

В регулярных выражениях я не силен, можете спросить об этом в разделе "Общие вопросы javascript", там часто спрашивают про выражения.

Если изберете второй путь, то почитайте про эти методы, это не сложно разобрать. Что не получится - помогу.


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