Скрипт для добавления изображения в самом конце последнего абзаца для нескольких блоков

#jquery

#jquery

Вопрос:

Для каждой статьи на странице я хотел бы вставить изображение в самом конце последнего абзаца. Мой HTML выглядит так:

 <div class="storycontent">
   <p>One</p>
   <p>Two</p>
   <p>Three</p>
</div> 
  

Таких разделов может быть несколько или только один. Также есть неизвестное количество <p></p> тегов.

Что я хотел бы сделать, так это вставить <img /> в самом конце последнего <p> перед закрывающим тегом.

Вот что у меня есть до сих пор, но это только добавление тега изображения к самому последнему <p> на странице, а не к последнему в storycontent <div>

 jQuery('.storycontent').each(
    function(){
        jQuery(this).last('p').append(img); 
                    //img is a var which contains an Image() element;
    }
);
  

Ответ №1:

Вы неправильно используете метод last() , который не принимает никаких аргументов и возвращает последний совпадающий элемент. Вы должны написать что-то вроде:

 jQuery(this).find("p").last().append($(img).clone());
  

Или:

 jQuery("p", this).last().append($(img).clone());
  

Или даже:

 jQuery("p:last", this).append($(img).clone());
  

Также обратите внимание, что вы не можете добавлять один и тот же элемент в DOM несколько раз, поскольку элемент будет перемещен в его новый родительский элемент, если он уже является частью DOM. Простым решением является его clone() , как это делает приведенный выше код.

Комментарии:

1. Почти готово. Это только помещает изображение в нужное место для последнего экземпляра storyconent

2. @Rob, верно, это потому, что вы продолжаете добавлять один и тот же элемент в DOM. Сначала я пропустил это, ответ обновлен соответствующим образом.

3. Так он перемещал Img на каждой итерации?

4. @Rob, точно. Этот побочный эффект методов вставки DOM на самом деле довольно часто используется для перемещения элементов.