Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как получить порядковый номер? (https://javascript.ru/forum/jquery/11984-kak-poluchit-poryadkovyjj-nomer.html)

Kenshi25 24.09.2010 16:24

Как получить порядковый номер?
 
Нужно получить порядковый номер элемента, по которому произведен клик, сделал так, но не работает, скажите в чем проблема и как правильно это сделать?

$("div").bind("click", function(){
	var a = $("div");
	for (var key in a) {
	    if( a.eq(key) == $(this) ) {
		alert (key);
	    }
	}
});

exec 24.09.2010 16:37

$( "div" ).click(function ( event ) {
	$( "div" ).each(function ( i ) {
		if ( this == event.target ) alert( i );
	});
});

Kenshi25 24.09.2010 16:50

А можно по порядку как это работает?

exec 24.09.2010 18:07

$( "div" ).click(function ( event ) { // Вешаем обработчик события
	$( "div" ).each(function ( i ) { // Цикл по всем DIV'-ам
		// Если данный DIV (this) равен элементу, по которому кликнули (event.target), то выводим алерт с номером
		if ( this == event.target ) alert( i );
	});
});

e1f 24.09.2010 19:52

$('div').click( function(e) {
	alert( $('div').index(e.target) );
} );

monolithed 26.09.2010 22:08

jQuery настолько изощренный диалект, что позволю себе добавить еще несколько способов получить порядковый номер элемента

//1
$(function(){
    $('div').click(function(){
        alert($(this).html());
   });
});

//2
$(function(){
  $('div').each(function(i){
    $(this).click(function(){
      alert(i);
    })
  });
});

//3
$(function(){
  $('div').each(function(i){
    $(this).bind('click',function(){
      alert(i);
    });
  });
});

//4
$(function(){
  $('div').each(function(){
    $(this).bind('click',function(){
      alert($(this).index());
    });
  });
});


Будет интересно увидеть еще варианты :)

e1f 27.09.2010 14:58

Вариант 1 -- бред.
Варианты 2-3 -- одно и тоже, + что будет, если дивов станет больше?
Вариант 4 -- тоже бред.

monolithed 27.09.2010 15:06

Чем бред?
В зависимости от ситуации, каждый их этих вариантов позволяет получить получить порядковый элемента, (если не брать первый псевдо-вариант).
Сам использую подход с event.target.



<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
	google.load("jquery", "1.4.2");
</script>

<script type="text/javascript">
//1
$(function(){
    $('div:eq(0) span').click(function(){
        alert($(this).html());
   });
});

//2
$(function(){
    $('div:eq(1) span').each(function(i){
    $(this).click(function(){
      alert(i);
    })
  });
});

//3
$(function(){
    $('div:eq(2) span').each(function(i){
    $(this).bind('click',function(){
      alert(i);
    });
  });
});

//4
$(function(){
    $('div:eq(3) span').each(function(){
    $(this).bind('click',function(){
      alert($(this).index());
    });
  });
});

</script>


<div>
	<span>0</span>
	<span>1</span>
</div>

<div>
	<span>0</span>
	<span>1</span>
</div>

<div>
	<span>0</span>
	<span>1</span>
</div>

<div>
	<span>0</span>
	<span>1</span>
</div>

e1f 27.09.2010 15:45

Опять 25. Варианты 2-3 сбоят, если добавить еще спанов динамически. Вариант 4 сбоит тут:
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
    google.load("jquery", "1.4.2");
</script>
 
<script type="text/javascript">
//4
$(function(){
    $('div span').each(function(){
    $(this).bind('click',function(){
      alert($(this).index());
      return false;
    });
  });
});
 
</script>

<div>
    <span>0 <span>1</span></span>
    <span>2 <span>3</span></span>
</div>


Часовой пояс GMT +3, время: 23:03.