Вот часть моего html. (он написан с использованием ejs)
<div class="objAddDiv">
<tr><td><button class="addObj">Do this action</button></td></tr>
<table><div class="objects"></div></table>
</div>
У меня есть несколько div objAddDiv на этой странице. Каждый из них имеет одну и ту же структуру внутри него. Я использую .append()
чтобы добавить больше ejs в .objects
. Мне сложно добавить только div .objects
который находится внутри того же div, что и кнопка. Я попытался сделать следующее
".addObj click": function(el, element){
$(".addObj").closest(".objAddDiv").find(".objects").append(//my ejs utility here)
}
Проблема в том, что $(".addObj").closest(".objAddDiv")
возвращает все .objAddDiv
на странице. Я просмотрел документацию jquery для .closest
и он говорит, что ближайший должен возвращать только один элемент. Есть лучший способ сделать это? Что я делаю не так. (это не мои настоящие имена классов btw)
Вот ответ, который я выяснил (для всех, кто приходит дальше) мне нужно было использовать элемент, который я передал в функцию:
el.closest(".objAddDiv").find(".objects").append(//ejs append stuff)
Это потому, что вы вызываете этот метод для каждого элемента с классом "addObj":
Для каждого элемента в наборе получите первый элемент, который соответствует селектору, путем тестирования самого элемента и прохождения через своих предков в дереве DOM.
Таким образом, вы получаете ближайший objAddDiv
для каждого элемента addObj
.
Предполагая, что вы делаете это внутри события нажатия кнопки, используйте это, чтобы получить правильный элемент:
$(this).closest(".objAddDiv").find(".objects").append(//my ejs utility here)