есть страница. в ней клонируемый блок. внутри блока тоже есть клон.
есть Блок и есть строки в блоке. 3 строки в блоке постоянны и 1 строка клонируется.
не получается сформировать цикл в скрипте чтобы был достоверный результат о количестве блоков и строк в них.
допустим мы заполнили первый блок, добавили внутри блока 2 значения. затем решил создать еще один блок и добавили в нем 3 значения.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;"/>
<style type="text/css">
${CSS!".body {font-family:sans-serif;}"}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<body>
<fieldset id = "klone_block_family" name='klone_block_family' style="width: 700px;border: 0">
<fieldset id = "member" name='member' class="member" style="width: 680px">
<div id = "klone_block_children_2" name='klone_block_children_2' class="klone_block_children_2">
<table width="754" id="trustee_table_2" name="trustee_table_2" border="0" cellpadding='2' cellspacing='2'>
<tr><td colspan='2'><i>Адресные сведения мест осуществления деятельности</i></td></tr>
<tr><td width="250">Почтовый индекс<font color="red">*</font></td><td width="500"><input type='text' required name="lindex" id="lindex" value="${lindex}" style="margin: 2px; width: 100%;" class="input_block"></td></tr>
<tr><td width="250">Почтовый адрес <font color="red">*</font></td><td width="500"><input type='text' required name="add" id="add" value="${add}" style="margin: 2px; width: 100%;" class="input_block"></td></tr>
<tr><td width="250">Адрес местонахождения <font color="red">*</font></td><td width="500"><input type='text' required name="addr" id="addr" value="${addr}" style="margin: 2px; width: 100%;" class="input_block"></td></tr>
<tr><td colspan='2'><i>Перечень заявляемых работ (услуг) для осуществления медицинской деятельности</i></td></tr>
</table>
<div id = "children_2" name='children_2' class="children_2">
Работы (услуги) <font color="red">*</font>
<input required name="servicelist" id="servicelist" style="margin: 2px; width: 500; vertical-align: top;" value="${servicelist}">
<!--<input type="button" id="button_child_2_del" class="button_child_2_del" value="X" >-->
<button name='button_child_2_del' id="button_child_2_del" class="button_child_2_del">Удалить</button>
<hr>
</div>
</div>
<button class="button_child_2_add" id="button_child_2_add" type="button" > Добавить запись</button>
<br/>
<input type="button" id="button_1" class="button_1" onclick="if(document.getElementById('klone_block_family').getElementsByTagName('fieldset').length>1) document.getElementById('klone_block_family').removeChild(this.parentElement);" value="Удалить блок" >
</fieldset>
</fieldset>
<button class="button_2" name='button_2' id='button_2' type="button" onclick="clone_family('klone_block_family');" >Добавить блок</button>
<br/>
</div>
</div>
<button type='button' name='button222' id='button222'>сформировать XML</button>
<textarea name='xml' id='xml' value='${xml}' style="margin: 2px; width: 100%;"></textarea>
<hr>
</form>
<script type="text/javascript">
$(document).ready(function () {
$("#button222").live('click',function(event) { // $("#outcome").click(function ()
var str;
var str_j;
str="<objects>";
str_j="";
$('#member [name="klone_block_children_2"]').each(function (){
//$('#member').each(function (){
str=str+"<object>";
str=str + "<lindex>" + $(this).find('[name="lindex"]').val()+ "</lindex>" ;
str=str + "<add>" + $(this).find('[name="add"]').val()+ "</add>";
str=str + "<addr>" + $(this).find('[name="addr"]').val()+ "</addr>";
//str=str + "<servicelist>" + $(this).find('[name="xml_j"]').val()+ "</servicelist>";
$('#klone_block_children_2 [name="children_2"]').each(function (){
str_j=str_j + "<servicelist>" + $(this).find('[name="servicelist"]').val()+ "</servicelist>";
});
str=str + str_j;
str=str+"</object>";
$("#xml").val($("#xml").val() + str + " ");
});
str=str+"</objects>";
$("#xml").val(str);
});
});
</script>
<script type="text/javascript">
$(document).ready(function() {
//Добавить элемент $(this).siblings(".klone_block_children_2").find("#children_2").eq(0).find('input').each(function(index){
$("#button_child_2_add").live('click',function(event)
{
$(this).addClass("button_child_2_add");
var i=$(this).siblings(".klone_block_children_2").find("#children_2").length; // число блоков div #children_2 в соседнем для нажатой кнопки блоке с классом .klone_block_children_2
// клонирует первый блок div #children_2 и вставляет его после последнего
$(this).siblings(".klone_block_children_2").find("#children_2").eq(0).clone(true).insertAfter($(this).siblings(".klone_block_children_2").find("#children_2").eq(i-1));
// обнуляем поля в новом блоке
$(this).siblings(".klone_block_children_2").find("#children_2").eq(i).find('input').each(function(index){
if ($(this).val()!="Удалить") $(this).val("");
});
}) ;
});
</script>
<!-- при нажатии на кнопку "Удалить данные по ребенку" -->
<script type="text/javascript">
$(document).ready(function() {
//Удалить элемент
$("#button_child_2_del").live('click',function()
{
var c=$(this).parents('div#klone_block_children_2').find("#children_2").length; // кол-во div-ов в блоке "Член семьи"
var m=$(this).parents('div').find("#children_2").length; // кол-во div-ов всего во всех блоках "Член семьи"
if ($(this).parents('div#klone_block_children_2').find("#children_2").length > 1) // кол-во div-ов всего во всех блоках "Член семьи"
{$(this).parent().remove();} // прямой родитель
}) ;
});
</script>
<script type="text/javascript">
// Функция добавляет клонируемый блок "Сведения о других членах семьи"
function clone_family(klone_block_family)
{
var firstForm = document.getElementById(klone_block_family); // ссылка на элемент
//вычисляем первый div который будем копировать
var form1 = document.getElementById(klone_block_family).getElementsByTagName('fieldset')[0] // начиная с него будут клонироваться блоки
newElem = form1.cloneNode(true)
// Очистить новый блок
for (var i=0;i<newElem.getElementsByClassName('input_block').length;i++)
{
newElem.getElementsByClassName('input_block')[i].value='';
newElem.getElementsByClassName('input_block')[i].checked =false; // снимаем галку
}
for (var i=0;i<newElem.getElementsByTagName('select').length;i++)
{
newElem.getElementsByTagName('select')[i].value='0';
}
//вставить новый блок
firstForm.appendChild(newElem);
// если убрать ф-цию, то при добавлении нового блока "Член семьи" все input.datepicker
// при невключенном чекбоксе "Член семьи является опекуном(попечителем)" станут активными
$(".member #is_trustee_2").each(function(index){
$(this).change();
});
var j = $("#klone_block_family .member").length; // число блоков "Член семьи"
// в последнем (только что добавленном блоке "Член семьи") удаляем все, кроме первого (slice(1)) блоки #children_2
$("#klone_block_family .member").eq(j-1).find("#children_2").slice(1).remove();
// очищаем поля в только что добавленном блоке
$("#klone_block_family .member").eq(j-1).find("#children_2 input").each(function(index){
if ($(this).val()!="Удалить") $(this).val("");
});
};
// Функция добавляет клонируемый блок данных по заявителю по запросу "Запрос-справка о полученных за шесть предыдущих месяцев перед обращением денежных средствах, выплачиваемых опекуну (попечителю) на содержание лиц, находящихся под опекой (попечительством) "
function clone_children(klone_block_children)
{
var firstForm = document.getElementById(klone_block_children); // ссылка на элемент
//вычисляем первый div который будем копировать
var form1 = document.getElementById(klone_block_children).getElementsByTagName('fieldset')[0] // начиная с него будут клонироваться блоки
newElem = form1.cloneNode(true)
// Очистить новый блок
for (var i=0;i<newElem.getElementsByClassName('input_block').length;i++)
{newElem.getElementsByClassName('input_block')[i].value=''}
//вставить новый блок
firstForm.appendChild(newElem);
};
</script>
</body>
</html>
при выполнении этого скрипта
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<script type="text/javascript">
$(document).ready(function () {
$("#button222").live('click',function(event) { // $("#outcome").click(function ()
var str;
var str_j;
str="<objects>";
str_j="";
$('#member [name="klone_block_children_2"]').each(function (){
//$('#member').each(function (){
str=str+"<object>";
str=str + "<lindex>" + $(this).find('[name="lindex"]').val()+ "</lindex>" ;
str=str + "<add>" + $(this).find('[name="add"]').val()+ "</add>";
str=str + "<addr>" + $(this).find('[name="addr"]').val()+ "</addr>";
// цикл
$('#klone_block_children_2 [name="children_2"]').each(function (){
str_j=str_j + "<servicelist>" + $(this).find('[name="servicelist"]').val()+ "</servicelist>";
});
/*
// если убрать цикл а оставить так хватает только первый инпут servicelist остальные игнорирует
str=str + "<servicelist>" + $(this).find('[name="servicelist"]').val()+ "</servicelist>";
*/
str=str + str_j;
str=str+"</object>";
$("#xml").val($("#xml").val() + str + " ");
});
str=str+"</objects>";
$("#xml").val(str);
});
});
</script>
получится структура вида
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<objects>
<object>
<lindex>Почтовый индекс</lindex>
<add>Почтовый адрес</add>
<addr>Адрес местонахождения</addr>
<servicelist>111</servicelist>
<servicelist>222</servicelist>
<servicelist>333</servicelist>
<servicelist>444</servicelist>
<servicelist>555</servicelist>
</object>
<object>
<lindex>Почтовый индекс2</lindex>
<add>Почтовый адрес2</add>
<addr>Адрес местонахождения2</addr>
<servicelist>111</servicelist>
<servicelist>222</servicelist>
<servicelist>333</servicelist>
<servicelist>444</servicelist>
<servicelist>555</servicelist>
<servicelist>111</servicelist>
<servicelist>222</servicelist>
<servicelist>333</servicelist>
<servicelist>444</servicelist>
<servicelist>555</servicelist>
</object>
</objects>
а должна
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<objects>
<object>
<lindex>Почтовый индекс</lindex>
<add>Почтовый адрес</add>
<addr>Адрес местонахождения</addr>
<servicelist>111</servicelist>
<servicelist>222</servicelist>
</object>
<object>
<lindex>Почтовый индекс2</lindex>
<add>Почтовый адрес2</add>
<addr>Адрес местонахождения2</addr>
<servicelist>333</servicelist>
<servicelist>444</servicelist>
<servicelist>555</servicelist>
</object>
</objects>
тянутся левые значения. помогите переделать скрипт.