Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.07.2017, 09:11
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Селектор по среднему значению атрибута data
Добрый день помогите пожалуйста разобраться. Есть скрипт:

for (var i = 0; i < other_arr.length; i++) {
	var $other_name = other_arr[i].split('|')[0], // значение data атрибуту которое мы принимаем за название и в дальнейшем ищем внутри него нужный элемент;
	      $other_min = other_arr[i].split('|')[1], // минимальное допустимое значение 
	      $other_max = other_arr[i].split('|')[2], // максимальное допустимое значение

	$('.product').each(function(){
		$(this).find('[data-filter_name="'+$other_name+'"]').each(function(){
			$(this).data('filter_val')  // этот скрипт выберет все значения из [data-filter_val], а мне нужно что бы он выбрал только то значение [data-filter_val] которое находиться в приделах $other_min <= $(this).data('filter_val') <= $other_max
		})
	})
}


Например $other_min, равен 50; $other_max, равен 100, скрипт должен выбрать все значения [data-filter_val] которые лежат в приделах от 50 до 100.

Заранее премного благодарен
Ответить с цитированием
  #2 (permalink)  
Старый 15.07.2017, 10:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

smart-create,
https://javascript.ru/forum/dom-wind...tml#post458372
Ответить с цитированием
  #3 (permalink)  
Старый 16.07.2017, 20:22
Интересующийся
Отправить личное сообщение для fearmear.wrk Посмотреть профиль Найти все сообщения от fearmear.wrk
 
Регистрация: 14.07.2017
Сообщений: 21

<div class="product">
  <div data-filter_name="foo" data-filter_val="10"></div>
<div class="product">
  <div data-filter_name="foo" data-filter_val="50"></div>
</div>
<div class="product">
  <div data-filter_name="foo" data-filter_val="100"></div>
</div>

<script>
   var other_arr = ['foo|50|200'];

   for (var i = 0; i < other_arr.length; i++) {
      var $other_name = other_arr[i].split('|')[0],
      $other_min = parseInt(other_arr[i].split('|')[1], 10),
      $other_max = parseInt(other_arr[i].split('|')[2], 10);
     
      $('.product').find('[data-filter_name="'+$other_name+'"]').filter(function(){
         var val = parseInt($(this).data('filter_val'), 10);
         return  val >= $other_min && val <= $other_max;
      });
   }
</script>

Последний раз редактировалось fearmear.wrk, 16.07.2017 в 20:32.
Ответить с цитированием
  #4 (permalink)  
Старый 20.07.2017, 12:00
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

fearmear.wrk, спасибо большое за участие и помощь.

Как по мне это решение самое правильное в данном случае. Но я не могу разобраться почему у меня не выходит получить значение val, даже в тестовом режиме, через console.log(val) - не выводит нечего.

Ради интереса пробовал вместо return val >= $other_min && val <= $other_max; написать просто return val, тоже нечего. НО если поставить console.log(val) до return, то результат есть, НО выводится конечно же все значение без фильтрации.

Пробовал даже обернуть ваш скрипт в function test () {}. А потом получить значение как результат выполнения этой функции, тоже нечего.

Хотя нет, в таком случае я получаю "undefinded".

Подскажите пожалуйста что я делаю не так?

Я понял логику скрипта, понял что именно он должен выдать. НО самое главное я понять не могу, как мне получить значение val уже после всех манипуляций в .filter()
Ответить с цитированием
  #5 (permalink)  
Старый 20.07.2017, 13:13
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

С выводом в консоль
<div class="product">
  <div data-filter_name="foo" data-filter_val="10"></div>
<div class="product">
  <div data-filter_name="foo" data-filter_val="50"></div>
</div>
<div class="product">
  <div data-filter_name="foo" data-filter_val="100"></div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<script>
   var other_arr = ['foo|50|200'];

   for (var i = 0; i < other_arr.length; i++) {
      var $other_name = other_arr[i].split('|')[0],
      $other_min = parseInt(other_arr[i].split('|')[1], 10),
      $other_max = parseInt(other_arr[i].split('|')[2], 10);
     
      $('.product').find('[data-filter_name="'+$other_name+'"]').filter(function(){
         var val = parseInt($(this).data('filter_val'), 10);
         if(val >= $other_min && val <= $other_max) console.log(val);
      });
   }
</script>

Или, с формированием результирующего массива
<div class="product">
  <div data-filter_name="foo" data-filter_val="10"></div>
<div class="product">
  <div data-filter_name="foo" data-filter_val="50"></div>
</div>
<div class="product">
  <div data-filter_name="foo" data-filter_val="100"></div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<script>
   var other_arr = ['foo|50|200'],
         result = [];

   for (var i = 0; i < other_arr.length; i++) {
      var $other_name = other_arr[i].split('|')[0],
      $other_min = parseInt(other_arr[i].split('|')[1], 10),
      $other_max = parseInt(other_arr[i].split('|')[2], 10);
     
      $('.product').find('[data-filter_name="'+$other_name+'"]').filter(function(){
         var val = parseInt($(this).data('filter_val'), 10);
         if(val >= $other_min && val <= $other_max) result.push(val);
      });
   }
   alert(result);
</script>

Последний раз редактировалось Dilettante_Pro, 20.07.2017 в 13:19.
Ответить с цитированием
  #6 (permalink)  
Старый 20.07.2017, 13:26
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Dilettante_Pro, Спасибо большое, Вы очень помогли.

Если вас не затруднит загляните еще пожалуйста сюда

Эту тему тоже создал я, и буду очень благодарен за помощь
Ответить с цитированием
  #7 (permalink)  
Старый 20.07.2017, 14:32
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

smart-create,
Ответил в той теме
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему после использования data атрибута в setTimeout, он перестаёт быть доступным ? tomberty Events/DOM/Window 14 19.09.2015 23:45
Как заменить значение data атрибута в ссылке? ligisayan jQuery 9 09.08.2015 08:05
Селектор атрибута FanAizu jQuery 1 30.03.2013 13:12
Поиск тега по значению его атрибута. frant32 Events/DOM/Window 12 03.06.2012 21:30
Как на php найти тэг по значению атрибута? bayah Серверные языки и технологии 1 14.02.2011 17:35