У меня есть стандартная УЛ. следующим образом:
<ul>
<li><a href="">Link</a></li>
<li><a href="">Link</a></li>
<li><a href="">Link</a></li>
<li><a href="">Link</a></li>
<li><a href="">Link</a></li>
</ul>
Я пытаюсь найти быстрый и эффективный способ вычислить объединенное со всех тегов LI. В настоящее время я имею:
var width = 0;
$('ul li').each(function() {
width += $(this).outerWidth();
});
Я просто задаюсь вопросом, существует ли более быстрый способ получить тот же результат, не используя цикл?
Спасибо за помощь!
Чтобы получить именно то, что вы хотите, нет. Это просто не тот случай, который хорошо сочетается с существующими функциями, цикл, как у вас, - самый быстрый способ. Ходят разговоры о том, чтобы добавить .childWidth()
или что-то в ядро... но я бы не стал задерживать дыхание :)
Другие ответы включают ширину родителя, включая дополнительное пространство, но это обычно не то, что вам нужно, так что пока... придерживайтесь цикла, как у вас. Все, что будет добавлено более короткое, будет гарантированно выполнять тот же объем работы (возможно, идентичный код).
Вы можете получить ширину самого элемента ul, но это даст вам ширину включая пули и поля:
var width = $("ul").outerWidth();
Если это меню и элементы расположены рядом друг с другом (а не ниже), попробуйте $ ('ul'). outerWidth ( )
.
[EDIT] Если ширина ul
фиксирована, найдите последний элемент списка и посмотрите на его правое смещение. Поскольку смещение всегда относительно родительского элемента, все, что вам нужно сделать, это добавить offsetLeft
и offsetWidth
, чтобы получить общую ширину всех дочерних элементов.