Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Несколько одновременно исполняемых селекторов (https://javascript.ru/forum/jquery/71060-neskolko-odnovremenno-ispolnyaemykh-selektorov.html)

emptyindorill 23.10.2017 16:11

Несколько одновременно исполняемых селекторов
 
Добрый день.

Не знаю как это называется, но:

$(function(){
   if ($('#da, #po, #projects, #opens, #effect, #potencial').is(':empty')) {
      $('#person #face').addClass('empty');
   };
});


как сделать что бы класс присваивался только тогда когда все из перечисленных селекторов пустые?

Подскажите пожалуйста?

Заранее спасибо!

ksa 23.10.2017 16:20

Цитата:

Сообщение от emptyindorill
как сделать что бы класс присваивался только тогда когда все из перечисленных селекторов пустые?

Как вариант...

var o=$('#da, #po, #projects, #opens, #effect, #potencial');
   if (o.filter(':empty').length==o.length) {
      $('#person #face').addClass('empty');
   };


Не проверял... :no:

Nexus 23.10.2017 16:21

Может так?
$(function(){
   if ($('#da, #po, #projects, #opens, #effect, #potencial').toArray().every(function(item){
	   return $(item).is(':empty');
   })) {
      $('#person #face').addClass('empty');
   };
});

emptyindorill 23.10.2017 16:43

Спасибо, но не один из вариантов не подошёл(

Nexus 23.10.2017 17:01

emptyindorill, это все инпуты?

Upd. https://jsfiddle.net/knhz8u1L/

ksa 24.10.2017 08:34

Цитата:

Сообщение от emptyindorill
но не один из вариантов не подошёл

Так ты бы полный пример сделал, а не кусок кода. :D
Так даже не понятно с чем ты вообще имеешь дело...

emptyindorill 24.10.2017 09:03

Прошу прощения.

Понял свою ошибку - объясню максимально конкретно)

<div id="person">
   <div id="face"><img src="img.jpg"></div>
   <div id="info"></div>

   <div id="medal">
      <div id="da"></div>
      <div id="po"></div>
      <div id="projects"></div>
      <div id="opens"></div>
      <div id="effect"></div>
      <div id="potencial"></div>
   </div>
</div>


В диве #medal есть дочерние дивы.
Если они все пустые, без контента - то #face addClass .empty.

ksa 24.10.2017 09:43

emptyindorill, уже лучше... :)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
.empty {
	color: red;
}
</style>
<script type='text/javascript'>
$(function(){
	var o=$('#medal > div');
	if (o.filter(':empty').length==o.length) {
		$('#face').addClass('empty');
	};
});
</script>
</head>
<body>
<div id="person">
	<div id="face">Empty</div>
	<div id="info"></div>
	<div id="medal">
		<div id="da"></div>
		<div id="po"></div>
		<div id="projects"></div>
		<div id="opens"></div>
		<div id="effect"></div>
		<div id="potencial"></div>
	</div>
</div>
</body>
</html>

Nexus 24.10.2017 09:44

https://jsfiddle.net/knhz8u1L/1/
<html>
<head>
<title></title>
<script src='https://code.jquery.com/jquery-latest.js'></script>
<style>
.empty{
  min-height:30px;
  background:red;
}
</style>
</head>
<body>
<div id="person">
   <div id="face"><img src="img.jpg"></div>
   <div id="info"></div>

   <div id="medal">
      <div id="da"></div>
      <div id="po"></div>
      <div id="projects"></div>
      <div id="opens"></div>
      <div id="effect"></div>
      <div id="potencial"></div>
   </div>
</div>
<script>
$(function(){
$('#medal > div').toArray().every(function(item){
  return $(item).is(':empty');
}) && $('#person').addClass('empty');
});
</script>
</body>

laimas 24.10.2017 09:46

emptyindorill,
вам ksa давал код, и он рабочий.

var box = $('#medal').find('>div');
    if(box.filter(':empty').length == box.length) ....

emptyindorill 24.10.2017 10:44

Уважаемые знатоки.
Спасибо Вам большое за помощь и обратную связь.

По jsfiddle вижу что все варианты работают, но заметил один момент:

https://jsfiddle.net/knhz8u1L/13/
https://jsfiddle.net/knhz8u1L/14/
https://jsfiddle.net/knhz8u1L/15/

Если родителей - #person больше одного, скрипт перестаёт работать.
https://jsfiddle.net/knhz8u1L/17/

Пробовал через .each(), толку ноль.

Nexus 24.10.2017 10:50

emptyindorill, id должен быть уникальным.
Используйте вместо "id" "class".

Upd. https://jsfiddle.net/knhz8u1L/18/

emptyindorill 24.10.2017 11:17

Да, мне уже пояснили.

$('.person').each(function(){
	if($(this).find('.medal > *').length == $(this).find('.medal > *:empty').length){
	$(this).find('.face').addClass('empty');
	}
});


Спасибо большое Вам и всем за оказанную помощь!

laimas 24.10.2017 11:42

Цитата:

Сообщение от emptyindorill
if($(this).find('.medal > *').length == $(this).find('.medal > *:empty').length)

Получайте один раз коллекцию и работайте с ней.

ruslan_mart 26.10.2017 09:52

$('.person').each(function() {
	if(!$(this).find('.medal:has(>:not(:empty))').length) {
		$(this).find('.face').addClass('empty');
	}
});

emptyindorill 10.11.2017 11:21

Цитата:

Сообщение от laimas (Сообщение 468078)
Получайте один раз коллекцию и работайте с ней.

Спасибо, то что нужно.

Подскажите пожалуйста, а если всё-таки есть нужда в проверке, например, строки таблицы, на пустые td с классом каким-либо?

Если класс такой + такой и + такой пустые то для tr .addClass или .css ?

emptyindorill 10.11.2017 16:50

Цитата:

Сообщение от emptyindorill (Сообщение 469708)
Спасибо, то что нужно.

Подскажите пожалуйста, а если всё-таки есть нужда в проверке, например, строки таблицы, на пустые td с классом каким-либо?

Если класс такой + такой и + такой пустые то для tr .addClass или .css ?

Решил задачу:
$('div:empty').parent().addClass('empty');


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