Как посчитать все элементы определенного типа в объекте jQuery? - PullRequest
2 голосов
/ 17 сентября 2010

Скажем, у меня есть объект jQuery с неопределенным содержимым (из something, который может быть динамическим селектором или строкой HTML):

var $o = $(something);

Теперь, например, как подсчитать, сколько <div> объектов содержится в самом объекте jQuery (т.е. нет потомков содержащихся элементов)? Я мог бы сделать

var l = $o.filter( function () { return $(this).is("div"); } ).length;

Другие идеи?

Ответы [ 2 ]

7 голосов
/ 17 сентября 2010

.filter() принимает селектор, поэтому

$o.filter('div')

на самом деле должно быть достаточно.

И, конечно, вы можете создать плагин для этого:

$.fn.count = function(selector) {  
    return this.filter(selector).length; 
}; 
6 голосов
/ 17 сентября 2010

Есть два способа подсчитать элементы определенного типа в объекте jQuery. Какой метод вы используете, зависит от вашего определения in.

  1. .find() .length - Найти всех потомков элемента (ов) DOM, представленных объектом jQuery, соответствующим шаблону. Можно также использовать контекст формы $(this, that), чтобы найти это в этом. Это реализовано с использованием .find()

  2. .filter() .length - Сокращение набора выбранных элементов DOM, представленных объектом jQuery, до включения только тех, которые соответствуют шаблону.


Если вы хотите найти потомков в объекте, используйте .find() или контекст:

$o.find("div").length

или

$("div", $o).length

Например

<li>
    <div></div>
    <div></div>
</li>

Для вышеизложенного:

$("li").find("div").length // This is 2
$("div", "li").length      // This is 2

$("li").filter("div").length // This is 0

Если вы хотите уменьшить количество выбранных элементов по правилу, используйте .filter ()

<div class="a"></div>
<div></div>

За вышеупомянутое

$("div").filter(".a").length // This is 1

$("div").find(".a").length // This is 0
$(".a", "div").length      // This is 0

jsFiddle с указанием .find() и .filter() на работе.

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