Ненавижу признаться, но я застреваю, пытаясь понять, как это сделать.jQuery, чтобы получить следующее совпадение в DOM после определенного элемента
например. делая вид, что у вас есть следующая структура:
<div>
...
<div>
<ul>
<li>
<a href="..."><img class="foo"/></a><!-- "previous" -->
</li>
<li>
<a href="..."><img class="bar"/></a>
</li>
<li>
<a href="..."><img class="foo"/></a><!-- I'm at this node -->
</li>
<li>
<a href="..."><img class="baz"/></a>
</li>
<li>
<a href="..."><img class="foo"/></a><!-- "next" 1 -->
</li>
</ul>
</div>
...
<div>
<ul>
<li>
<a href="..."><img class="foo"/></a><!-- "next" 2 -->
</li>
<li>
<a href="..."><img class="baz"/></a>
</li>
<li>
<a href="..."><img class="foo"/></a><!-- "next" 3 -->
</li>
<li>
<a href="..."><img class="bar"/></a>
</li>
</ul>
</div>
</div>
Я в обработчик событий JQuery, связанный с выделенным"foo"
узлом выше. Я хочу найти «следующий» img
элемент, который является "foo"
.
Однако есть 2 проблемы.
- Я только хочу, чтобы выбрать элементы «Foo», которые далее в DOM, чем текущий узел я на (например, «предыдущий» Foo, и текущий Foo не требуется)
- Хотя Я показал вложенность как следующий точный шаблон, сгенерированный код есть/может быть вставлен в любой уровень ... таким образом, я не могу просто выполнить .parent(). Parent(). Parent() .siblings(). find() ... и т. д.
Если вы можете себе представить, что каждый раз, когда браузер добавляет узел в DOM это увеличивает счетчик и присваивает узел, индекс ... что вы могли бы получить ... Что я хочу:
var here = $(this).getIndexInDOM();//e.g. returns 347
$('img.foo').each(function(){
if($(this).getIndexInDOM() > here){//is this past our current index?
doSomething($(this));//use it
break;
}
});
.getIndexInDOM()
метода, очевидно, не существует в jQuery ... но мне любопытно, есть ли у кого-нибудь решение получить следующий элемент, который мне нужен.
Единственное решение, которое я могу думать в тот момент действительно в-элегантный и будет выполнять довольно паршиво, когда во второй половине изображения в DOM ...
//using vanilla JavaScript
var thisImg = theCurrentImageIHave;//some reference to the DOM element
var found = false;
for(var i=0;i<document.images.length;i++){
if(found){
if(document.images[i].className == 'foo'){
doSomething(document.images[i]);
break;
}
} else {
if(document.images[i] == thisImg){
found = true;
}
}
}
awesome! .index() - это именно то, что мне нужно здесь ... и если бы я использовал jQuery v1.4, я бы набросился на него в одно мгновение ;-) но, увы, я еще не там, поэтому я буду нужно немного зациклиться, чтобы получить индекс сам. – scunliffe
@scunliffe - jQuery 1.4 не требуется, когда вы передаете элемент DOM (как в примере выше). Два других использования '.index()' требуют 1.4. : o) Вот такой же пример, но вместо этого используйте 'jQuery 1.3.2': http://jsfiddle.net/QVphP/1/ – user113716
О, человек, я слишком долго смотрел на свой код, вы правы. .. .index (элемент) поддерживается в jQuery 1.0+, чтобы добавить исправление к моему исправлению ;-) – scunliffe