Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Найти количество элементов списка (https://javascript.ru/forum/jquery/28620-najjti-kolichestvo-ehlementov-spiska.html)

jeysmook 27.05.2012 11:19

Найти количество элементов списка
 
Нужно найти числовое количество элементов LI в списке. Помогите пожалуйста.

<ul class="list">
<li><a href="#">Главная</li>
<li><a href="#">Главная</li>
<li><a href="#">Главная</li>
<li><a href="#">Главная</li>
<li><a href="#">Главная</li>
<li><a href="#">Главная</li>
</ul>

an.semionov 27.05.2012 11:29

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="http://yandex.st/jquery/1.7.2/jquery.js"></script>
    <script type="text/javascript">
		$(function(){
			var countLi = $('ul.list li').size();
			alert(countLi);
		});		
    </script>
</head>
<body>
    <ul class="list">
			<li><a href="#">Главная</li>
			<li><a href="#">Главная</li>
			<li><a href="#">Главная</li>
			<li><a href="#">Главная</li>
			<li><a href="#">Главная</li>
			<li><a href="#">Главная</li>
	</ul>
</body>
</html>

jeysmook 27.05.2012 11:30

an.semionov,
Спасибо большое )

SpiritAbsolute 18.07.2014 13:50

Получить количество это пол дела! А как работать с какой нибудь лишкой этого списка, указав ее позицию в этом количестве? Например, тут общее количество 6 LI, как мне в li номер 3 вставить какой нибудь класс, или id. В общем начать работать с любым элементом по его позиции.

Sweet 18.07.2014 14:18

Цитата:

Сообщение от SpiritAbsolute
А как работать с какой нибудь лишкой этого списка, указав ее позицию в этом количестве?

Нахер лишку. Научись работать с документацией и гуглом.
Ввёл в гугл "получить элемент jquery". Первым выдало ссылку на документацию, вторым - на статью с сайта.

рони 18.07.2014 14:20

SpiritAbsolute,
http://api.jquery.com/eq/

SpiritAbsolute 18.07.2014 14:24

ага вот про eq() тоже нашел, сделал так
for (var i=1; i<$('#tg-menu > li').size(); i++){
			if($('#tg-menu > li:eq('+i+')').prop('class')=='ui-menu-item ui-state-focus'){
				var position = i;
			}
		}
		console.log(position);

рони 18.07.2014 14:35

SpiritAbsolute,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>

<body>
<ul id="tg-menu">
  <li></li>
  <li></li>
  <li class="ui-menu-item ui-state-focus"></li>
</ul>
<script>
 var i = $('#tg-menu > li').index($('li.ui-menu-item.ui-state-focus')) ;
 alert(i)
</script>
</body>

</html>

SpiritAbsolute 18.07.2014 14:50

Да, ништяк! спасибо, еще лучше вариант :)

SpiritAbsolute 18.07.2014 15:10

В итоге в общем получилось так.
Стояла задача, отслеживать изменения select , который стилизован с помощью jquery ui.
Получалось так, jquery ui генерировал свою структуру span, ul, li - не трогая <select>(просто скрывая его через display:none;)
В результате, не возможно было отследить изменение select`a и получить его значение, для дальнейших действий.
/*
#tg - ID <select>, в котором нужно отследить изменения
#tg-menu - ID <ul>, который Jquery UI присваивает после формирования ul списка с значениями <select>
*/
// Отслеживаем клик по элементу(LI), который формирует Jquery UI после клика на span, которым он заменяет select
$('body').on('click', '.ui-menu-item', function() {
	// Определяем позицию выбранного элемента(LI), по классу 'ui-state-focus', с помощью index()
	var position=$('#tg-menu > li').index($('li.ui-state-focus'));
	// Получив позицию, узнаем в какой позиции находится нужный, для изменения, <option> и делаем его выбранным.
	for (var i=1; i<$('#tg > option').size(); i++){
		if(i==position){
			$('#tg > option:eq('+position+')').prop("selected", "selected");
		}
	}
	// Получаем значение выбранного <select>
	var tg = $('#tg').val();
});

рони 18.07.2014 15:18

SpiritAbsolute,
какой смысл в for -- строка 10 -- нужна строка только 12 .

SpiritAbsolute 18.07.2014 16:04

Да, точно! Плюс, нужно было добавить проверку, если <select> на странице много, то код должен срабатывать только с выбираемым.
/*
Задача - отследить изменение множества <select> на странице, стилизованных с помощью jquery ui
#tg - ID <select>, в котором нужно отследить изменения
#tg-menu - ID <ul>, который Jquery UI присваивает после формирования ul списка с значениями <select>
*/
// Отслеживаем клик по элементу(LI), который формирует Jquery UI после клика на span, которым он заменяет select
$('body').on('click', '.ui-menu-item', function() {
// Если <select> много на странице, то нужно условие, которое проверяет, что код изменений срабатывает именно с нужным <select>
if($(this).parent().prop('id')=='tg-menu') {
// Определяем позицию выбранного элемента(LI), по классу 'ui-state-focus', с помощью index()
var position=$('#tg-menu > li').index($('li.ui-state-focus'));
// Получив позицию, узнаем в какой позиции находится нужный <option> и делаем его выбранным.
$('#tg > option:eq('+position+')').prop("selected", "selected");
// Получаем значение выбранного <select>
var tg = $('#tg').val();
// Дальнейшие действия...
}
});

рони 18.07.2014 16:18

SpiritAbsolute,
хорошие плагины кастомизации сами устанавливают значения в селектах

SpiritAbsolute 18.07.2014 16:26

Типа cusel? Я решил от него отказаться, он мне показался ужасным... Мы его тягали из проекта в проект, пока вот он не слетел на новом jquery 1.11.1 и я его не снес. Вот переделываю теперь :-)

рони 18.07.2014 16:39

SpiritAbsolute,
у вас в селектах -- текст и значения совпадают?

SpiritAbsolute 18.07.2014 16:50

охохохо.... возникла следующая серьезная проблема... jquery ui генерирует свои списки из select`a только первый раз. А когда новые данные приходят в селект из ajax , он не генерирует новые свои списки ul>li


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