Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Поиск самого длинного элемента (https://javascript.ru/forum/jquery/15788-poisk-samogo-dlinnogo-ehlementa.html)

Randomizer 13.03.2011 13:58

Поиск самого длинного элемента
 
Нужно найти самый широкий <li> в менюшке и получить его значение ширины.

Пишу так:

$(function() {

var ulwidth = $('.mainmenu ul li').map(function(indx, element){
return $(element).width();
var allwidth = ulwidth.get();

});


как найти максимальное значение среди всех перехваченых "ширин" <li> не знаю... помогите разобраться :help:

Matre 13.03.2011 14:09

var A = $('.mainmenu ul li'), max = 0, elem;
A.each(function () {
	if (this.offsetWidth > max)
		max = this.offsetWidth, elem = this;
});


В переменной elem будет самый широкий элемент.

Randomizer 13.03.2011 16:05

2Matre Странно, но похоже скрипт всегда выбирает только первый элемент <li> из меню, а не самый длинный.

Kolyaj 13.03.2011 20:44

Потому что они все одинаковой длины.

Randomizer 14.03.2011 11:56

Нет, смотрите:
есть такой html
<ul>
<li><a href="/">Главная страница</a></li>
<li><a href="/cont">Контакты</a></li>
<li><a href="/faq">F.A.Q.</a></li>
</ul>


Все кнопки разной длинны...

Kolyaj 14.03.2011 11:59

Ссылки разной длины, а li -- блочный элемент, он растягивается на всю ширину.

Matre 14.03.2011 12:34

var A = $('.mainmenu ul li a'), max = 0, elem;
A.each(function () {
	if (this.offsetWidth > max)
		max = this.offsetWidth, elem = this;
});


Д/З: выучить основы HTML, CSS и желательно JS.

Randomizer 14.03.2011 13:55

Спасибо за наводку!
Видимо, я не до конца четко выразил суть проблемы. Вообще мне это нужно, что бы заставить в IE нормально отображать ширины колонок выпадающих списков меню (горизонтальное меню). Сейчас (без JS) приходится всем выпадающим спискам <ul>...</ul> задавать фиксированную ширину, а это не гуд т.к. могут быть длинные кнопки меню или наоборот очень короткие: визуально плохо.

JS нужен не что бы ловить максимальную ширину какой-либо кнопки из какого-либо выпадающего списка и передавать эту ширину его родителю-контейнеру <ul>, дабы IE хавал и выстраивал выпадающие списки с нужной шириной для каждого.

Вот такая проблема... Честно скажу, что нормальных решений в гугле не нашел, даже на других сайтах вижу, что все списки фиксированны по ширине, не нашел ни одного живого примера.

:(

jura4x01 14.03.2011 14:13

сделал бы лучше через таблицу.

Kolyaj 14.03.2011 14:13

Такая хрень в IE случается, если внутри абсолютно позиционированного элемента что-то привязывается к правому краю (float: right; right: 5px; margin-left: auto; ...). Если избавиться от этого привязывания, то блок будет нормальной ширины.


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