Вход

Просмотр полной версии : Очистить массив по условию


Velidan
19.03.2015, 12:57
Доброго дня уважаемые коллеги. Вопрос немного простой для понимающий людей, но для меня это проблема, иначе не обращался за помощью.

Хочу сделать так. У нас есть коллекция из 5 элементов, у каждого из них есть свойство css (display). Я хочу проверить их все, и если в массиве присутствует больше 1 элемента сdisplay - block, что-то там сделать. Как это можно реализовать? Заранее спасибо.


var node3OpenMore = $('#node-wrapper-3').find('a.open');
var node3CloseMore = $('#node-wrapper-3').find('a.close');
node3OpenMore.click(function(){
$('#node-wrapper-3').css({'height':'auto','max-height':'none'})
$('#node-wrapper-3').find('.wrapper-footer').css('position','relative')
});

node3CloseMore.click(function(){
var closeButtonCollection = $('#node-wrapper-3').find('a.close');
var resArray = [];
for(var i = 0;i < closeButtonCollection.length; i++){
var oneElem = $(closeButtonCollection[i]);
if(oneElem.css('display') == 'block') {
alert("Catch");
}
}
$('#node-wrapper-3').find('.wrapper-footer').css('position','absolute');
});

рони
19.03.2015, 13:06
Velidan,
а сейчас то что мешает?

Velidan
19.03.2015, 13:09
Доброго дня Рони. Я просто не знаю как это сделать.
(Ситуация усложняется тем, что у нас 1 элемент точно будет открыт - это текущий, а мне нужно узнать или есть еще какой-то элемент с "открытым" видом)

Пробую делать так, но не получается ничего. (пишет Uncaught TypeError: undefined is not a function), я знаю, что это значит, что я передаю неверное значение, но на этом мое понимание процесса заканчивается, к сожалению


var newArr = closeButtonCollection.filter(function(item){return item.css('display') == 'block'; })
alert(newArr);

skrudjmakdak
19.03.2015, 13:13
<!DOCTYPE html>
<html>
<head>
<title>example</title>
</head>

<body>
<div style="display: none;">1</div>
<div style="display: none;">2</div>
<div style="display: none;">3</div>
<div style="display: block;">4</div>
<div style="display: none;">5</div>
<script>
var els = document.querySelectorAll('div'), ln = els.length;
for (var i = 0; i < ln; ++i) {
if (els[i].style.display === 'block') {
console.log('yes');
break;
}
}
</script>
</body>
</html>

рони
19.03.2015, 13:16
Velidan,
наверно завести переменную = 0 и её ++ если 'block' и потом если она вдруг 2 то хеппи энд и брек :-?

рони
19.03.2015, 13:21
Velidan,
<!DOCTYPE HTML>

<html>

<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">

</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){
var len = $("div:visible").length;
alert('Видимых блоков '+len);
});


</script>
</head>

<body> <div style="display: none;">1</div>
<div style="display: none;">2</div>
<div style="display: block;">3</div>
<div style="display: block;">4</div>
<div style="display: none;">5</div>



</body>

</html>

skrudjmakdak
19.03.2015, 13:23
мой вариант :)
<!DOCTYPE html>
<html>
<head>
<title>example</title>
</head>

<body>
<div style="display: none;">1</div>
<div style="display: none;">2</div>
<div style="display: none;">3</div>
<div style="display: block;">4</div>
<div style="display: none;">5</div>
<div style="display: none;">6</div>
<div style="display: block;">7</div>
<div style="display: none;">8</div>
<div style="display: none;">9</div>
<div style="display: block;">10</div>
<script src="http://code.jquery.com/jquery-2.1.3.min.js"></script>
<script>
var els = $('div'),
thsActive = els.eq(3),
collection = [];

els.each(function (i, el) {
if ($(el).css('display') === 'block' && thsActive !== el) {
collection.push(el);
}
})

console.log(collection)
</script>
</body>
</html>

рони
19.03.2015, 13:23
Velidan,
var node3OpenMore = $('#node-wrapper-3').find('a.open');
var node3CloseMore = $('#node-wrapper-3').find('a.close');
node3OpenMore.click(function(){
$('#node-wrapper-3').css({'height':'auto','max-height':'none'})
$('#node-wrapper-3').find('.wrapper-footer').css('position','relative')
});

node3CloseMore.click(function(){
var closeButtonCollection = $('#node-wrapper-3').find('a.close:visible');
var resArray = [];

if(closeButtonCollection.length > 1) {
alert("Catch");
}

$('#node-wrapper-3').find('.wrapper-footer').css('position','absolute');
});

Velidan
19.03.2015, 13:24
сделал так, но все равно не получается, почему то


var closeButtonCollection = $('#node-wrapper-3').find('a.close');
var resArray = [];
for(var i = 0;i < closeButtonCollection.length; i++){
var oneElem = $(closeButtonCollection[i]);
var checker = 0;
if(oneElem.css('display') == 'block') {
checker++;
}
(checker >= 2) ? alert("Catch") : '';
}

рони
19.03.2015, 13:30
skrudjmakdak,
:)
<!DOCTYPE html>
<html>
<head>
<title>example</title>
</head>

<body>
<div style="display: none;">1</div>
<div style="display: none;">2</div>
<div style="display: none;">3</div>
<div style="display: block;">4</div>
<div style="display: none;">5</div>
<div style="display: none;">6</div>
<div style="display: block;">7</div>
<div style="display: none;">8</div>
<div style="display: none;">9</div>
<div style="display: block;">10</div>
<script src="http://code.jquery.com/jquery-2.1.3.min.js"></script>
<script>
var els = $('div'),
thsActive = els.eq(3),
collection;
collection = $.makeArray(els.not(thsActive).filter(':visible')) ;
console.log(collection)
</script>
</body>
</html>

рони
19.03.2015, 13:31
Velidan,
5 строка должна быть во 2

skrudjmakdak
19.03.2015, 13:35
рони,
та я jquery уже давненько не пользовался:)

Velidan
19.03.2015, 13:48
Спасибо вам всем за помощь. Прошу прощения если достал своим невежеством.

Velidan,
5 строка должна быть во 2

Как я не увидел эту ошибку сразу, ведь область видимости, и каждый тик осуществляется реинициализация переменой, и она постоянно затирается.

Невнимателен.