Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очистить массив по условию (https://javascript.ru/forum/misc/54489-ochistit-massiv-po-usloviyu.html)

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>


Часовой пояс GMT +3, время: 19:38.