Добавить элемент в JavaScript

У меня есть структура HTML ниже.

<div class = "SomeClassName">
   <a href = "https://abc.xyz">
      <span>
         <img id = "SomeImgID1" />
      </span>
   </a>
   <a href = "https://xyz.abc">
      <span>
         <img id = "SomeImgID2" />
      </span>
   </a>
</div>

Я хочу добавить тег <div> перед каждым тегом <img>, как мне это сделать с помощью чистого javascript?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
112
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Что-то вроде

let divElement=document.querySelection('div.someClass');
Array.from(divElement.querySelectionAll('img'))
.forEach(el=>divElement.insertBefore(document.createElement('div'),el));

Опять же, если вы хотите обернуть img, вы можете использовать следующий фрагмент:

let divElement=document.querySelection('div.someClass');
Array.from(divElement.querySelectionAll('img'))
.forEach(el=>{
    let div=document.createElement('div');
    divElement.insertBefore(div,el));
    div.appendChild(el);
});

Для получения дополнительной информации см. Element.insertBefore на MDN

извините, я не хочу «добавлять» пустые теги <div> перед тегами <img>. Я хочу обернуть теги <img> внутри <div> Вывод должен быть таким: <div class = "SomeClassName"> <a href = "abc.xyz "> <span> <div> <img id = "SomeImgID1" /> </span> </div> </a> <a href = " xyz.abc"> <span> <div> <img id = "SomeImgID2" /> </div> </span> </a> </div>

iaMsUPerNOva 17.12.2020 05:19

iaMsUPerNOva, наконец, я вас понял, и я здесь с решением.

<a class = "image" href = "https://abc.xyz"> <!--note this-->

$(function() {
        var node = $("a.image"); // This will copy your a tag so that img tag will also get copied.
    $(".SomeClassName").append('<div>hello</div>');//This will create a new div containing  hello text 
        $("a.image").remove(); // This will remove a tag which is already copied to node.
        $("SomeClassName").append(node); //Finally we are going to add newly created div to SomeClassName.  
    });

Итак, то, что мы хотим здесь сделать, включает в себя два шага:

  1. Найдите каждый элемент IMG внутри вашего DIV с классом SomeClassName.
  2. Для каждого из этих IMG элементов создайте новый DIV и вставьте его перед элементом.

Вот как вы это делаете.

/* document.querySelectorAll returns a NodeList.
   The spread operator "..." converts it into an array,
   so that we can call the forEach method on it. */
[...document.querySelectorAll("div.SomeClassName img")].forEach(x => {
    // Here we create the new DIV
    let div = document.createElement("div");
    // Just some sample text to show
    div.textContent = "Hello!";
    // x.parentNode finds the parent of the IMG element.
    // The frst parameter of node.InsertBefore is the
    // element we want to insert as its child, and the
    // the second parameter is the reference element
    // before which this new element will be inserted
    x.parentNode.insertBefore(div, x);
});

Не просто отвечайте кодом, на самом деле объясните, почему он полезен и как он работает, чтобы спрашивающий мог научиться.

Timothy Chen 17.12.2020 06:00

Спасибо, мистер Х, за ответ. Я не хочу добавлять новый тег <div> перед <img>. Я хочу, чтобы тег <img /> был обернут внутри <div> вместо добавления <div></div> перед <img>, чтобы он выглядел так: <div><img /></div>

iaMsUPerNOva 17.12.2020 06:51

Спасибо всем за ваши ответы. Я забыл упомянуть ранее, что у меня был еще один родитель <div>, и окончательная структура была такой.

<div class = "ParentClassName">
   <div class = "ChildClassName">Some Content</div>
   <div class = "ChildClassName">Some Content2</div>
   <div class = "ChildClassName">
      <a href = "https://abc.xyz">
      <span>
      <img id = "SomeImgID1" />
      </span>
      </a>
      <a href = "https://xyz.abc">
      <span>
      <img id = "SomeImgID2" />
      </span>
      </a>
   </div>
</div>

Я мог бы обернуть все теги <img> внутри <div>, выполнив следующий шаг. Примечание. Если ваше имя класса является динамическим, вы можете удалить его из селекторов запросов, и вы можете поместить только элемент селектора, например document.querySelector("div");

 let divElement = document.querySelector("div.ParentClassName");
      Array.from(divElement.querySelectorAll("div.ChildClassName img")).forEach(
        (el) => {
          let div = document.createElement("div");
          el.parentElement.insertBefore(div, el);
          div.appendChild(el);
        }
      );

и мой окончательный результат был

<div class = "ParentClassName">
   <div class = "ChildClassName">Some Content</div>
   <div class = "ChildClassName">Some Content2</div>
   <div class = "ChildClassName">
      <a href = "https://abc.xyz">
         <span>
            <div>
               <img id = "SomeImgID1" />
            </div>
         </span>
      </a>
      <a href = "https://xyz.abc">
         <span>
            <div>
               <img id = "SomeImgID2" />
            </div>
         </span>
      </a>
   </div>
</div>

Другие вопросы по теме