Как добавить новый тег после другого тега внутри тега?

171
10 января 2019, 23:40

Надо внутри тега article добавить новый тег hr после каждого p( c помощью js). Попробовал такой способ:

var artic = document.getElementsByTagName('article')
var ptag = artic.getElementByTagName('p');
var newhr = document.createElement('hr');
artic.insertBefore(newhr, ptag);

Но это не помогло.
Как добавить новый тег hr после другого тега p внутри тега article? Надо сделать без использовании Class and Id(У меня там есть несколько p и у каждого есть свой Id и Class)

Answer 1

Можно воспользоваться методом .insertAdjacentElement

var ptag = document.getElementById('idName'); 
 
var newhr = document.createElement('hr'); 
ptag.insertAdjacentElement('afterend', newhr);
<article> 
  <p id="idName">Paragraph</p> 
</article>

Так же можно воспользоваться тем же .insertBefore, передавая вторым параметром не текущий элемент, а следующий

var ptag = document.getElementById('idName'); 
 
var newhr = document.createElement('hr'); 
ptag.parentNode.insertBefore(newhr, ptag.nextElementSibling);
<article> 
  <p>Paragraph</p> 
  <p id="idName">Paragraph idName</p> 
  <p>Paragraph</p> 
  <p>Paragraph</p> 
</article>

Для случая нескольких p

for (var ptag of document.getElementsByTagName('p')) { 
  var newhr = document.createElement('hr'); 
  ptag.insertAdjacentElement('afterend', newhr); 
}
<article> 
  <p>Paragraph</p> 
  <p>Paragraph</p> 
  <p>Paragraph</p> 
  <p>Paragraph</p> 
  <p>Paragraph</p> 
  <p>Paragraph</p> 
</article>

Answer 2

К сожалению нету ничего такого как insertAfter, поэтрому нужно комбинировать, и как один из вариантов:

var getChildIndex = function(child) {
  var parent = child.parentNode;
  for (var i = 0; i !== parent.children.length; i++) {
    if (parent.children[i] === child) {
      return i;
    }
  }
};
var insertAfter = function(el) {
  var ind = getChildIndex(el);
  var hr = document.createElement('hr');
  if (ind === el.parentNode.children.length - 1) {
    el.parentNode.appendChild(hr);
  } else {
    el.parentNode.insertBefore(hr, el.parentNode.children[ind + 1]);
  }
};
var artic = document.getElementsByTagName('article');
var ptag = artic[0].querySelectorAll('p');
for (var i = 0; i !== ptag.length; i++) {
  insertAfter(ptag[i]);
}
READ ALSO
Как вывести значение JSON файла в тег input

Как вывести значение JSON файла в тег input

Может вопрос и очень тупой, но всё же Как мне строку из JSON файла занести в input, что бы в дальнейшем получить возможность редактировать её?

157
Дергается к верху сайт после загрузки анимации

Дергается к верху сайт после загрузки анимации

Ссылка на сайт! Для анимации использовалась библиотека animationcss Если открыть на мобиле, то при загрузке очередного блока с анимацией сайт...

154
Отслеживать изменение роута

Отслеживать изменение роута

Необходимо, чтобы с определенного экрана нельзя было уйти, пока не завершишь, например, сделкуТо есть в роутере прописано /action/:actionId - ActionProcessComponent

174
Не опознан формат файла при скачивании canvas javascript

Не опознан формат файла при скачивании canvas javascript

Собственно есть скрипт накладывания текста на изображениеВсе вроде как работает

163