jquery находит количество элементов li в ul - PullRequest
2 голосов
/ 23 сентября 2010

Jquery / программирование новичка здесь.Я пытаюсь динамически назначить высоту ul, чтобы вызвать прокрутку.Мой метод состоит в том, чтобы определить, сколько элементов в списке, а затем применить некоторую математику, чтобы вычислить высоту моего ul (я пробовал height (); но он не давал правильное число; ul - это сетка миниатюр изображенийотображается в строке, показывая три элемента в строке, поэтому я думаю, что я должен рассчитать эту высоту).Изображения имеют площадь 75 пикселей и размер поля между изображениями составляет 10 пикселей.

Я придумал это, но это не работает:

var numitems =  $("#my_grid li").size();

var numrows = ( numitems / 3 );

var myheight = ((numrows * 75) + [(numrows -1 ) * 10]);

$("ul#my_grid").height(myheight);

Спасибо!

Ответы [ 4 ]

5 голосов
/ 23 сентября 2010

Лучший способ:

<!doctype html>
<head><title></title></head>
<style type="text/css">
ul {
  width: 300px;
  }
  li {
    width: 75px;
margin: 10px;
    display: inline-block;
  }
</style>
<body>
<ul>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
</ul>
</body>
</html>

Решение состоит в том, чтобы использовать inline-block и позволить браузеру определить правильную высоту для ul.Если вы не можете использовать inline-block, поскольку вам нужна поддержка старых браузеров, дайте мне знать, и мы пойдем дальше.

Решение jQuery:

<!doctype html>
    <head><title></title></head>
    <style type="text/css">
    ul {
      width: 300px;
  }
  li {
    width: 75px;
    height: 75px;
    margin-top: 10px;
    margin-right: 10px;
    display: inline-block;
  }
</style>
<script src="http://code.jquery.com/jquery-1.4.2.min.js" type="application/javascript"></script>
<script type="application/javascript">
$(document).ready(function() {
    var numitems =  $("#my_grid li").length;
    var numrows = Math.ceil(numitems / 3);
    var myheight = (numrows * 75) + (numrows * 10);
    $("ul#my_grid").height(myheight);
});
</script>
<body>
<ul id="my_grid">
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
<li>Test</li>
</ul>
</body>
</html>

Обратите внимание, что вам нужно найти потолок для чисел, иначе ваш рост не будет достаточно большим, например, если у вас 10 элементов.

Решение jQuery поставляется с огромным предостережением : Это сработает только в том случае, если вы точно знаете, насколько высоким будет каждый ли.Если в какой-то момент вы решите, что вам нужно определить размер динамически (например, в ответе Пётровица), вам нужно быть осторожным, чтобы убедиться, что ваша функция не выполняется до тех пор, пока не будут загружены все таблицы стилей, чтобы окончательный размер вашегоэлемент может быть определен.В противном случае JavaScript может определить высоту элемента до применения всех стилей, и вы получите странные результаты.По этой причине я настоятельно рекомендую браузеру и CSS по возможности выполнять все обязанности по макету.

5 голосов
/ 23 сентября 2010

количество элементов li: var numitems = $("#my_grid li").length;

1 голос
/ 24 сентября 2010

Вот как получить высоту всех <li>:

var heightofChildren;
//Loop through the children:
$("#my_grid").children().each(function(index, obj){
    // The height of an element included padding and margin is:
    heightofChildren += obj.outerHeight();
};
//Now set the height of the ul:
$("#my_grid").height(heightofChildren);
0 голосов
/ 23 сентября 2010

Я думаю, что это будет делать то, что вы хотите - не можете проверить атм. Я обновлю, когда смогу.

var numitems =  $("#my_grid li").length;
var numrows = ( numitems / 3 );
var myheight = ((numrows * 75) + ((numrows -1 ) * 10));
$("#my_grid").css("height", myheight);

Если вы хотите отладить гетто, добавьте предупреждение (numitems); и убедитесь, что вы получаете номер обратно. Ваш селектор тоже может быть испорчен ...

Кроме того, если у вас его нет, получите FireBug для Firefox. После его установки нажмите Ctrl + Shift + C, выберите элемент мышью и отправляйтесь в город, чтобы выяснить, в чем дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...