JavaScript: 3 Ways to Insert Custom Content After N Paragraphs

Updated: January 26, 2024 By: Guest Contributor Post a comment


In this tutorial, we will cover effective ways to dynamically insert custom HTML content after a specified number of paragraphs ‘<p>‘ using JavaScript. This technique is often used in web development to integrate ads, calls to action, or additional information within article content.


Before diving into the various methods, it’s essential that you have a fundamental understanding of:

  • HTML & the HTML DOM
  • Basic JavaScript syntax and operations

Understanding the Task

The task is to target every ‘N‘th paragraph within a container element, such as a ‘<div>‘ or ‘<article>‘, and then insert custom content after that paragraph. Let’s break down the steps involved:

  • Select the container element that holds the paragraphs.
  • Find every ‘N‘th paragraph inside this container.
  • Create the custom HTML content to insert.
  • Insert the custom content after the targeted paragraph.

Method 1: Using ‘insertBefore’ and ‘nextSibling’

We’ll start with the most basic approach, which is using the DOM’s ‘insertBefore‘ method in combination with ‘nextSibling‘. Here’s a step-by-step guide with code examples:

1. Select the container element:

const container = document.querySelector('#container');

2. Find the paragraphs and loop through them:

const paragraphs = container.querySelectorAll('p');
let nth = 3; // Replace '3' with whatever number 'N' should be
for (let i = nth - 1; i < paragraphs.length; i += nth) {
  // Operations will be performed on paragraphs[i]

3. Create the custom HTML element:

const customContent = document.createElement('div');
customContent.innerHTML = '<!-- Your custom HTML -->';

4. Insert the custom element after the targeted paragraph:

for (let i = nth - 1; i < paragraphs.length; i += nth) {
  container.insertBefore(customContent.cloneNode(true), paragraphs[i].nextSibling);

Method 2: Using ‘appendChild’ and ‘insertAdjacentElement’

If we’re dealing with appending content at the end of a container or directly adjacent to a node, ‘appendChild‘ is very useful. With ‘insertAdjacentElement‘, we can specify the precise location relative to the reference element.

1. Again, select the container and find the paragraphs.

// Same as in Method 1
const container = document.querySelector('#container');

2. Create the custom HTML content:

// Same as in Method 1
const customContent = document.createElement('div');
customContent.innerHTML = '<!-- Your custom HTML -->';

3. Insert the content after the targeted paragraph:

for (let i = nth - 1; i < paragraphs.length; i += nth) {
  paragraphs[i].insertAdjacentElement('afterend', customContent.cloneNode(true));

Method 3: Using jQuery for Streamlined Syntax

JQuery is a powerful JavaScript library that simplifies HTML DOM tree traversal and manipulation. Let’s achieve our task in a more concise way using jQuery:

1. First, include jQuery in your project.

<script src="" integrity="sha256-/xUj+3OJ+c7G48/YI17YBMAdSLlsToVdsaAFtU9Hv5k=" crossorigin="anonymous"></script>

2. Use jQuery selectors and methods to insert content:

const nth = 3; // Replace with your chosen N
$('#container p:nth-of-type(' + nth + 'n)').after('<div>Your custom HTML</div>');

Best Practices & Considerations

Here are some important tips and considerations for implementing these methods:

  • Performance: If you’re working on a high-traffic website, consider performance implications of manipulating the DOM.
  • Content duplication: If you’re cloning nodes, ensure that any event handlers are also cloned if needed, or use event delegation.
  • SEO impact: Be cautious with adding content that may affect the SEO of your page, especially when it comes to ad placement.
  • Accessibility: The added content should be made accessible, following the best practices for web content accessibility.


With the provided methods, you now have the tools necessary to insert custom content dynamically using JavaScript. Whether you choose the native DOM approach or leverage the power of jQuery, remember that each method has its own set of advantages. It is crucial to weigh these against your project’s requirements, keeping in mind performance and maintainability. Happy coding!