Получить индекс элемента, как ребенка относительно родителей



допустим, у меня есть эта разметка:



<ul id="wizard">
<li>Step 1</li>
<li>Step 2</li>
</ul>


и у меня есть этот jQuery:



$("#wizard li").click(function () {
// alert index of li relative to ul parent
});


как я могу получить индекс ребенка li относительно его родителя, при нажатии, что li?



например, когда вы нажимаете "Шаг 1",alert С "0"должно выскочить.

357   4  

4 ответов:

$("#wizard li").click(function () {
    console.log( $(this).index() );
});

однако вместо того, чтобы прикреплять один обработчик щелчка для каждого элемента списка, лучше (с точки зрения производительности) использовать delegate, который будет выглядеть так:

$("#wizard").delegate('li', 'click', function () {
    console.log( $(this).index() );
});

в jQuery 1.7+, вы должны использовать on. Приведенный ниже пример связывает событие с #wizard элемент, работающий как делегат события:

$("#wizard").on("click", "li", function() {
    console.log( $(this).index() );
});

что-то типа:

$("ul#wizard li").click(function () {
  var index = $("ul#wizard li").index(this);
  alert("index is: " + index)
});

взгляните на это пример.

$("#wizard li").click(function () {
    alert($(this).index()); // alert index of li relative to ul parent
});

делегировать и жить просты в использовании, но если у вас не будет больше li:S добавлено динамически, вы можете использовать делагацию событий с обычной привязкой/щелчком. Должен быть некоторый прирост производительности с использованием этого метода, так как DOM не нужно будет отслеживать для новых совпадающих элементов. У меня нет никаких фактических чисел, но это имеет смысл:)

$("#wizard").click(function (e) {
    var source = $(e.target);
    if(source.is("li")){
        // alert index of li relative to ul parent
        alert(source.index());
    }
});

вы можете проверить его в jsFiddle:http://jsfiddle.net/jimmysv/4Sfdh/1/

Comments

    Ничего не найдено.