#javascript #jquery
#javascript #jquery
Вопрос:
В приведенном ниже HTML я хотел бы добавить класс к первому элементу-двойнику P, который находится перед div, с классом «div-class».
<p>hello</p>
<p>hello</p> -> add class to this element
<div><p>test</p></div>
<div class="div-class"></div>
Это не работает:
jQuery(".div-class").prev("p").addClass("p-class");
Ответ №1:
prev()
Метод выбирает только элемент-побратим, который находится непосредственно перед элементом, поскольку вы используете p
селектор, он ничего не выберет, потому что нет никакого p
тега, который находится непосредственно перед элементом.
Вы можете использовать prevAll()
метод, чтобы получить все элементы-побратимы, которые находятся перед элементом, и first()
метод, чтобы получить ближайший из коллекции.
jQuery(".div-class").prevAll("p").first().addClass("p-class");
.p-class {
color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>hello</p>
<p>hello</p>
<div>
<p>test</p>
</div>
<div class="div-class"></div>
This doesn't work:
Ответ №2:
Вы можете использовать siblings("p").last()
:
jQuery(".div-class").siblings("p").last().addClass("p-class");
jQuery(".div-class").siblings("p").last().addClass("p-class");
.p-class {
color: #f00
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>hello</p>
<p>hello</p>
<div><p>test</p></div>
<div class="div-class"></div>
jQuery siblings()
возвращает все дочерние элементы из соответствующего селектора в порядке их размещения. Таким образом, желаемый элемент-двойник будет .last()
в списке.
Комментарии:
1. К вашему сведению, позиционные селекторы удалены
Ответ №3:
Используйте:
jQuery(".div-class").prev("div").prev("p").addClass("p-class");
jQuery(".div-class").prev("div").prev("p").addClass("p-class");
.p-class{
font-weight: bold;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>hello</p>
<p>hello</p>
<div>
<p>test</p>
</div>
<div class="div-class"></div>