2010-05-28 3 views
1

У меня есть произвольно глубокий список вида:Выберите следующий элемент в исходном коде страницы с помощью JQuery

<ul> 
<li></li> 
<li> 
    <ul> 
    <li></li> 
    </ul> 
</li> 
</ul> 

Я пытаюсь построить функцию «nextElement», которая возвращает селектор JQuery.

При первом вызове функции он возвращает первый li в списке. Во второй раз, когда он вызывается, он возвращает следующую страницу на странице. И т. Д.

Я бы хотел, чтобы эта функция не обращала внимания на братьев и сестер, родителей, детей и т. Д. Все, о чем я забочусь, это то, что каждый раз, когда он вызывается, выбирается следующий li в источнике.

Любые предложения о том, как это сделать?

Благодаря

ответ

2

Решение no-jQuery ..

function getIterator(){ 
    var nodes = document.getElementByTagName("li"); 
    var index = 0; 
    return { 
     next: function(){ 
      return nodes[index++]; 
     }, 
     hasNext: function(){ 
      return index < nodes.lenght - 1; 
     } 
    }; 
} 

Затем с помощью

var iterator = getIterator(); 
while (iterator.hasNext()){ 
    var node = iterator.next(); 
    console.log(node.innerHTML); 
    // if you want to just wrap the node in $(node).... 
} 

или более эффективным

var iterator = getIterator(), node; 
while ((node = iterator.next())){ 
    console.log(node.innerHTML); 
    // if you want to just wrap the node in $(node).... 
} 
+0

приятно! прекрасно работает. Благодарю. – Travis

0

Вероятно, лучше всего, чтобы изменить концепцию nextElement быть больше, как это:

(function($) { 
    var index = -1; 
    jQuery.fn.nextElement = function() { 
     index = (index + 1) % this.length; 
     return this.eq(index); 
    } 
})(jQuery); 

Вы можете использовать его как это:

$("li").nextElement(); // returns first li 
$("li").nextElement(); // returns second li 

и т.д ...

+0

Единственная проблема с этим решением является то, что он не будет сброшен для каждого логического селектора. Может быть легко расширена для учета нескольких логических селекторов. Как ваш вопрос стоит, это должно быть разумным решением. – tbranyen

Смежные вопросы