Индекс Jquery не может найти элемент (-1) неправильный ввод (с живой функцией) - PullRequest
1 голос
/ 01 июля 2011

Мне нравится получать индекс элемента li. Элементы li создаются после загрузки страницы. Jquery возвращает ошибку -1 не найдено.

Структура html (находится в dom, а не в источнике страницы):

<div id="warp-expand">
  <ul>
   <li><div class="song"><div class="list_b"></div><a>test1</a></div></li>
   <li><div class="song"><div class="list_b"></div><a>test2</a></div></li>
  </ul>
</div>

Jquery для получения индекса li:

 $("#warp-expand ul li a").live('click',function () {

    var x = $("warp-expand ul li").index(this);
    alert(x); //returns -1  

 });

Как сделаны ли:

 $("#playlister").click(function () {
    $("#jp_playlist_2 ul li").each(function()
    {
    var s = $(this).text();
    $('#warp-expand ul').append('<li><div class="song"><div class="list_b"></div><a>' +s+ '</a></div></li>');
    });

});

Ответы [ 2 ]

3 голосов
/ 01 июля 2011

Вот, пожалуйста,

$('#warp-expand a').live('click',function () {    
    var idx = $(this).closest('li').index();    
});

Демонстрационная версия: http://jsfiddle.net/Aphrq/1/

Итак, как видите, вызов index() без каких-либо параметров работает простохорошо.Просто выберите элемент (в данном случае соответствующий элемент LI) и вызовите на нем index().


Также рассмотрите возможность кэширования ссылки на ваш элемент DOM при загрузке страницы:

// cache reference on page-load (do this for all your references)
var warp = $('#warp-expand');

// use delegate(), it's better!
warp.delegate('a', 'click', function() {
    var idx = $(this).closest('li').index();        
});

Живая демоверсия: http://jsfiddle.net/Aphrq/2/

0 голосов
/ 01 июля 2011
 $("#warp-expand ul li a ").live('click',function () {

    var x = $(this).closest('li').index();
    alert(x); 

 });

http://jsfiddle.net/5vGsE/

...