Почему .closest (селектор) возвращает более одного значения?

0

Вот часть моего 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)

  • 4
    Поскольку вы используете $ (". AddObj"), он сначала будет соответствовать всем этим элементам, а затем вернет каждый ближайший элемент .objects относительно каждого .addObj.
  • 0
    @ А. Вольф (лицо ладонью) есть ли способ обойти это?
Показать ещё 7 комментариев
Теги:

2 ответа

0
Лучший ответ

Вот ответ, который я выяснил (для всех, кто приходит дальше) мне нужно было использовать элемент, который я передал в функцию:

el.closest(".objAddDiv").find(".objects").append(//ejs append stuff)
2

Это потому, что вы вызываете этот метод для каждого элемента с классом "addObj":

Для каждого элемента в наборе получите первый элемент, который соответствует селектору, путем тестирования самого элемента и прохождения через своих предков в дереве DOM.

Таким образом, вы получаете ближайший objAddDiv для каждого элемента addObj.

Предполагая, что вы делаете это внутри события нажатия кнопки, используйте это, чтобы получить правильный элемент:

$(this).closest(".objAddDiv").find(".objects").append(//my ejs utility here)
  • 0
    Спасибо за вашу помощь. Я не предоставил нужную информацию. Что сработало ниже в моем ответе

Ещё вопросы

Сообщество Overcoder
Наверх
Меню