Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.10.2020, 18:45
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Почему у меня appendChild засовывает не в конец?
Добрый день,

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

Код (html + js):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head id="head"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<style type="text/css">
</style>

<meta http-equiv="Content-Type" content="text/html; charset=utf8">

</head>

<body bgproperties=fixed>


<p id="ApproxAll">
  <p id="Approx_0">
    <input type="text" id="ApproxA_0" size=6 placeholder="<A (Moll/L)"> 
    <input type="text" id="ApproxB_0" size=6 placeholder=">B (Moll/L)"> 
    <input type="text" id="ApproxC_0" size=6 placeholder="<C (Da)"> 
    <input type="text" id="ApproxD_0" size=6 placeholder=">D (Da)"> 
    <input type="text" id="ApproxE_0" size=6 placeholder="<E (%)">
    <button onclick="DeleteApproximation(0)">X</button> <br> </p>
  <br>
</p>

<br>
<button onclick="AddMoreApproximations()">Add More</button>

<script>
var TotalAmountOfApproximations=1;


function AddMoreApproximations()
{ let par = document.createElement("P");
  par.id='Approx_'+TotalAmountOfApproximations;
  par.innerHTML=
    ' <input type="text" id="ApproxA_'+TotalAmountOfApproximations+'" size=6 placeholder="<A (Moll/L)">'+
    ' <input type="text" id="ApproxB_'+TotalAmountOfApproximations+'" size=6 placeholder=">B (Moll/L)">'+
    ' <input type="text" id="ApproxC_'+TotalAmountOfApproximations+'" size=6 placeholder="<C (Da)">'+
    ' <input type="text" id="ApproxD_'+TotalAmountOfApproximations+'" size=6 placeholder=">D (Da)">'+
    ' <input type="text" id="ApproxE_'+TotalAmountOfApproximations+'" size=6 placeholder="<E (%)">'+
    ' <button onclick="DeleteApproximation('+TotalAmountOfApproximations+')">X</button> <br> ';
  document.getElementById('ApproxAll').appendChild(par);
  TotalAmountOfApproximations++;
  return;
}


function DeleteApproximation(ind)
{ if(TotalAmountOfApproximations==1)
  { document.getElementById('ApproxA_0').value = "";
    document.getElementById('ApproxB_0').value = "";
    document.getElementById('ApproxC_0').value = "";
    document.getElementById('ApproxD_0').value = "";
    document.getElementById('ApproxE_0').value = "";
  } else
  { TotalAmountOfApproximations--;
    for(var i=ind; i<TotalAmountOfApproximations; i++)
    { var next=i+1;
      document.getElementById('ApproxA_'+i).value = document.getElementById('ApproxA_'+next).value;
      document.getElementById('ApproxB_'+i).value = document.getElementById('ApproxB_'+next).value;
      document.getElementById('ApproxC_'+i).value = document.getElementById('ApproxC_'+next).value;
      document.getElementById('ApproxD_'+i).value = document.getElementById('ApproxD_'+next).value;
      document.getElementById('ApproxE_'+i).value = document.getElementById('ApproxE_'+next).value;
    }
    var elem = document.getElementById('Approx_'+TotalAmountOfApproximations);
    elem.parentNode.removeChild(elem);
  }
  return;
}

</script>

</body></html>


Тут я создаю строку из 5 label и одной кнопки, у label-ов id должны быть Approx_%d, где %d - номер строки с 0. Вот когда я вызываю добавление этой строки в общую структуру посредством
document.getElementById('ApproxAll').appendChild(par);

полученная срока (хоть и ее id максимальный) должна засовывается в конец, а попадает она в предпоследнее положение.

Я пробовал через
innerHTML+=...
но тогда если юзер уже заполнил что-то, то эти значения теряются, то есть вроде appendChild по сути.

Помогите, пожалуйста, тыкните мне, почему оно в конец не вставляется.

Спасибо!

Последний раз редактировалось Was-Ja, 03.10.2020 в 18:51.
Ответить с цитированием
  #2 (permalink)  
Старый 03.10.2020, 19:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

Was-Ja,
строка 30 ...=0;
строку 44 перенести в 34
Ответить с цитированием
  #3 (permalink)  
Старый 03.10.2020, 19:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

Сообщение от рони
строка 30 ...=0;
строку 44 перенести в 34
можно не изменять, основная причина в том что абзацы в абзацах не живут, но запихнуть можно.
измените строки 15 и 24 на div
Ответить с цитированием
  #4 (permalink)  
Старый 03.10.2020, 19:39
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,753

<p> внутрь <p> нельзя вставлять.
Тег <p> не требует закрытия
Браузер считает, что очередной <p> закрывает предыдущий

<p id="ApproxAll">
<p id="Approx_0">
означает

<p id="ApproxAll">
</p>
<p id="Approx_0">

Замените <p > на <div> и будет вам счастие.
Ответить с цитированием
  #5 (permalink)  
Старый 03.10.2020, 19:50
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Спасибо большое за советы!!!

Сообщение от voraa
<p> внутрь <p> нельзя вставлять.
да, точно, не знал и из-за этого зациклился, спасибо большое!!! С div все на раз заработало!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему у меня не срабатывает @media в одном месте ? Texnarik Элементы интерфейса 6 27.02.2020 18:49
отчаяния пост NightmareZ Оффтопик 6 25.04.2017 13:32
Конец года или "моя курсовая работа". what-a-punk Оффтопик 2 29.09.2015 18:51