#jquery
#jquery
Вопрос:
Кажется, об этом спрашивали около миллиарда раз, но я не мог найти, как конкретно сделать то, что я хочу сделать, хотя это очень просто:
<button></button>
<button></button>
<img />
В принципе, я хочу нажать любую кнопку и попросить их обновить изображение. С помощью этого кода:
$(this).next('img').attr("src","newimage.png");
Нижняя кнопка работает, а верхняя — нет. Кажется, логично выбирать элемент ‘next’, но, однако, нелогично не с помощью селектора, поскольку в противном случае верхняя кнопка работала бы, поскольку она продолжала бы находить следующий элемент, который является элементом img.
Я пробовал другие вещи, такие как closest (), но, похоже, это тоже не делает того, что предполагает его название.
Комментарии:
1.
this
В опубликованном коде нет контекста … пожалуйста, добавьте полный код.2.
nextAll('img').eq(0)
получит все изображения, следующие за кнопками, и захватит первое3. Похоже, что они братья и сестры, так что сделайте это как
$(this).siblings('img')...
.4. @Taplar Да, это сработало бы так же, как и в ответе ниже. Я действительно очень удивлен, что нет функции для получения следующего соседнего элемента с помощью селектора. Я думаю, что базовый next () должен делать это по умолчанию.
Ответ №1:
Проблема в том, что next()
ищет только следующий родственный элемент. Чтобы исправить это, вы могли бы использовать nextAll()
наряду с :first
для извлечения img
требуемого:
$('button').click(function() {
$(this).nextAll('img:first').attr("src", 'https://i.imgur.com/CaTFJ0z.png');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>A</button>
<button>B</button><br />
<img src="https://i.imgur.com/RGv7GmZ.png" />
Комментарии:
1. Этот код действительно работает. Значит, на самом деле нет подлинной функции ‘nearest’? Странно, что вам приходится выполнять этот странный обходной путь только для того, чтобы заставить что-то подобное работать.
2. На самом деле это не обходной путь, просто так оно работает. DOM представляет собой древовидную структуру, и «ближайший» — это очень относительный термин. Существует множество методов обхода для перемещения вверх, вниз и вбок, но нет ничего, что явно говорило бы «двигаться вбок, но игнорировать X узлов», вот почему вам нужно сделать то, что я упомянул выше.
3. Да, я просто предположил, что next () может использовать селектор, но я думаю, что это невозможно, он просто получает то, что находится рядом, без указания опции.