#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 на самом деле довольно часто используется для перемещения элементов.