2013-05-22 6 views
2

Внутри каждой моей функции я вытягиваю текст из div, добавляя его как класс к родительскому элементу, а затем мне нужно подсчитать, сколько элементов имеет этот класс. Проблема возникает потому, что она находится внутри каждой моей функции, поскольку она подсчитывается постепенно, а не просто дает мне общую сумму.Как я могу подсчитать общее количество элементов внутри каждой функции?

Вы можете увидеть в моей скрипке, что выход 1231211 и то, что я пытаюсь получить это 3211.

My Fiddle

Моего HTML

<div class="parent"> 
    <div class="nid">asdf</div> 
</div> 

<div class="parent"> 
    <div class="nid">asdf</div> 
</div> 

<div class="parent"> 
    <div class="nid">asdf</div> 
</div> 

<div class="parent"> 
    <div class="nid">qwerty</div> 
</div> 

<div class="parent"> 
    <div class="nid">qwerty</div> 
</div> 

<div class="parent"> 
    <div class="nid">zxcv</div> 
</div> 

<div class="parent"> 
    <div class="nid">ghjk</div> 
</div> 

<div class="numbers"> 

</div> 

Моей JQuery

$(".nid").each(function() { 
    var nid = $(this).text(); 
    $(this).parent().addClass(nid); 
    var nidCount = $(".parent."+nid).length; 
    $('.numbers').append(nidCount); 
}); 
+0

Так что вам просто нужно подсчитать уникальные значения или что? Какова первоначальная задача, которую вы пытаетесь решить? – zerkms

+0

Да, мне нужно подсчитать уникальные значения. Таким образом, три родительских элемента будут иметь класс asdf. Мне нужно посчитать это и вернуть общее число 3 вместо подсчета их пошагово, 123. – NickB

+0

, если вам просто нужно подсчитать, почему вы хотите установить его в родительский класс? Какова первоначальная задача? – zerkms

ответ

1

Попробуйте

var counter = {}; 
$(".nid").each(function() { 
    var text = $(this).text(); 
    var count = counter[text] || 0; 
    counter[text] = count + 1; 
}); 
$.each(counter, function(key, value){ 
    $('.numbers').append(value); 
}) 

Демо: Fiddle

+0

Это похоже на работу! Спасибо :) – NickB

-1

Попробуйте поместить запятую между обоими классами.

var nidCount = $(".parent,."+nid).length; 
+0

Это похоже на подсчет любых элементов с родительским классом. Он возвращается 7777777. – NickB

1

Внутри цикла отсчет происходит каждый раз. Итак, вы считаете все asdf для первого, 1, всего asdf для второго, 2 и т. Д. Вы можете хранить счеты каким-либо другим способом в цикле, возможно, с объектом. Затем, после цикла, распечатайте подсчеты.

Вы также можете агрегировать ниды, добавить классы в родительский, а затем во втором цикле, который зацикливает совокупные ниги, вы можете подсчитать, сколько у родителей этого конкретного класса.

+0

Звучит неплохо, но я определенно не понимаю, как это выполнить. Я посмотрю. – NickB

0

Ваш скрипт добавляет nidCount в .numbers каждый раз, когда он считает DIV. То, что вы должны сделать, это что-то вроде этого:

var numbers = {}; 
$(".nid").each(function() { 
    var nid = $(this).text(); 
    $(this).parent().addClass(nid); 
    var nidCount = $(".parent."+nid).length; 
    numbers[nid] = nidCount; 
}); 

for (var key in numbers) { 
    $('.numbers').append(numbers[key]); 
} 
+1

1. 'numbers' должен быть объектом, а не массивом 2. вы пропустили' var' для 'key' – zerkms

+0

@zerkms Исправлена ​​запись, спасибо! (Он работал отлично для меня без этих изменений, возможно, мой браузер интерпретировал материал либерально ...) –

+0

Это тоже работает. Большое спасибо за помощь :) – NickB

Смежные вопросы