Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Массовая обработка div'ов (https://javascript.ru/forum/jquery/5160-massovaya-obrabotka-div%27ov.html)

Jaska 21.09.2009 21:44

Массовая обработка div'ов
 
Имеется html-код

<div id="GetString21"><div>
<div id="GetString22"><div>
<div id="GetString23"><div>

мне нужно получить значение id в div'e и отправить post'ом в php-скрипт, результат поместить в этот же тэг и перейти к обработке следущего.

непонятно какую функцию цеплять на $("div") чтобы она поочердно проходила по всем элеметам. буду очень признателен если поможете :)

Gvozd 21.09.2009 21:54

.each(function(){})
перебирет все элементы

Jaska 21.09.2009 23:11

получился такой код:

$(document).ready(function(){
 $("div[id]").each(function(){
  var sID = $(this).attr("id");
  $.post('test.php', {'param': $(this).attr("id")}, function(data) {
   $("div#"+sID+" p").text(data)
   });
 });
});

что-то мне не нравится. пришлось в div'ы добавить тэг p и в него заполнять ответ от php скрипта. если заполнять в этот же тэг то выводится только 1-ый тэг почему то

Octane 21.09.2009 23:21

Замыкания

$(function(){
	$("div[id]").each(function(){
		(function(sID) {
			$.post('test.php', {'param': sID}, function(data) {
				$("div#"+sID+" p").text(data);
			});
		})($(this).attr("id"));
	});
});


Почему не послать на сервер сразу все идентификаторы в одном запросе?

Jaska 22.09.2009 00:00

Спасибо большое, немного неясен код но с этим разберусь. А можно ли как нить сделать чтобы вместе $("div#"+sID+" p") было просто $("div#"+sID)? Потому что при таком раскладе показывается только верхняя строчка

Octane 22.09.2009 00:09

хотя нет, поспешил я, тут лишняя обертка не нужна

$(function(){
    $("div[id]").each(function(){


            var sID = $(this).attr("id");
            $.post('test.php', {'param': sID}, function(data) {
                $("#" + sID).text(data);
            });

    });
});


должны все div'ы обработаться, не знаю почему у вас только первая строчка показывается. Выложите на каком-нибудь сервере страничку, чтобы посмотреть.

Jaska 22.09.2009 00:58

Выложить к сожалению на сервер не могу, могу только дать исходники.

index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Web PtokaX</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="test.js"></script> 
</head>
<body>
<div id="GetString21"><div>
<div id="GetBool22"><div>
<div id="GetNumber23"><div>
</body>
</html>


test.js
$(function(){
 $("div[id]").each(function(){
  var sID = $(this).attr("id");
  $.post('test.php', {'param': sID}, function(data) {
   $("#" + sID).text(data);
  });
 });
});


test.php
<?php if (isset($_POST['param'])) echo $_POST['param']; ?>


Результат
GetString21

Octane 22.09.2009 01:16

Цитата:

Сообщение от Jaska
<div id="GetString21"><div>
<div id="GetBool22"><div>
<div id="GetNumber23"><div>

У вас div'ы не закрыты, поэтому они все вложенные и уничтожаются после первого ответа от сервера.

Jaska 22.09.2009 07:21

О господи, вот растяпа. Прошу прощения не заметил) спасибо!

Octane 22.09.2009 08:15

Вот за что я не люблю jQuery, всегда идет работа с коллекцией элементов, даже если в ней один элемент или вообще ничего нет. В данном случая коллекция получается пустой, и действие не выполняется, при этом не возникает никаких ошибок, попробуй пойми, что не так.


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