Выберите первый интервал, предшествующий элементу img (произвольные элементы dom между ними)? - PullRequest
1 голос
/ 15 декабря 2011

Я не могу найти селектор, подходящий для моих нужд, то есть получить первый (и единственный) элемент .info span перед элементом img.Пожалуйста, будьте терпеливы, я новичок в jQuery:

<div> <!-- common parent -->
   <span class="info"></span>
   <p>Stuff</p><span>Other sfuff</span>
   <!-- p, span or possibly other dom element before img -->
   <img src="" alt="" class="highlight" />

   <span class="info"></span>
   <!-- here nothing precede img element -->
   <img src="" alt="" class="highlight" />
</div>

Я пробовал:

$("img.highlight").prev("span.info") (то есть непосредственно предшествующий брат ) потерпит неудачу впервый пример пока работает во втором.

$("img.highlight").prevAll("span.info") не удастся со вторым, потому что будет выбран и первый диапазон.

EDIT : будетболее чистый это реальный код:

$("img.highlight").each(function() {
    $info = $(this).selector("span.info") // selector() to be replaced
    $info.text($(this).attr("src")); // Fill the right span.info
});

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

Вы могли бы сделать

$("img.highlight").prevAll("span.info:first")
1 голос
/ 15 декабря 2011

$('img.highlight').prevUntil('img.highlight', 'span.info')

1 голос
/ 15 декабря 2011

Кажется, работает следующее:

$('img').each(
    function(){
        $(this).prevAll('span.info');
    });

JS Fiddle demo .

В демоверсии я добавил контент к элементам информации span и настроил их CSS, чтобы было понятно, на что они влияют. Но та же самая техника должна работать для ваших нужд.

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