Самый чистый способ получить следующий брат в jQuery - PullRequest
33 голосов
/ 04 июня 2011

http://jsfiddle.net/mplungjan/H9Raz/

После нескольких тестов со следующим ('a') и так далее, я наконец нашел тот, который работал. Мне просто интересно, почему следующий («а») нет, или ближайший или похожий. Существуют ли более чистые способы получить доступ к ссылке после галочки, которую я нажимаю?

$('form input:checkbox').click(function () {
 alert($(this).nextAll('a').attr("href"));
}); 
<form>
  <div>
    <input type="checkbox" name="checkThis" value="http://www.google.com" />Check here<br/>
    <a href="http://www.google.com">click here</a><br>   
    <input type="checkbox" name="checkThis" value="http://www.bing.com" />Check here<br/>
    <a href="http://www.bing.com">click here</a>       
  </div>
</form>

Ответы [ 3 ]

47 голосов
/ 04 июня 2011

Чтобы уточнить комментарии выше:

Вы не можете написать:

  • next("a"), потому что next () пытается соответствовать только следующему элементу. Он будет попадать в элемент <br> и ничего не совпадать.

  • closest("a"), потому что closest () идет вверх по цепочке предков, начиная с самого элемента, и поэтому пропускает элементы <a>.

Вы можете пишите:

  • next().next(), как предлагает Аренд. Это, вероятно, самое быстрое решение, но оно делает обязательными элементы <br>.

  • nextAll("a"), но он может возвращать несколько элементов (и будет делать это с вашим примером разметки). Цепочка в first () помешает этому, но nextAll () все равно придется перебирать всех следующих братьев и сестер, что может замедлить его в зависимости от сложности разметки внутри вашего <div> элементов.

  • nextUntil("a").last().next(), который выполняет итерацию только для следующих братьев и сестер до тех пор, пока не найдет ссылку, а затем возвращает ближайший ближайший брат последнего найденного элемента. может быть быстрее nextAll(), опять же, в зависимости от вашей разметки.

0 голосов
/ 04 октября 2017

Ниже код работал для меня

$ ('# id ~ iframe');

0 голосов
/ 16 мая 2015

Или вы можете просто использовать встроенную функцию jQuery .siblings()

https://api.jquery.com/siblings/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...