Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.10.2012, 12:32
Новичок на форуме
Отправить личное сообщение для zamanuha Посмотреть профиль Найти все сообщения от zamanuha
 
Регистрация: 01.10.2012
Сообщений: 3

Обертка для блока
Сделал скрипт слайдера фильтра. У меня этих фильтров несколько. Все имеют одинаковую внутреннюю структуру. Мне нужно чтоб мой скрипт работал с каждым блоком по-отдельности. Можно ли использовать какую-то обёртку для блока одного фильтра чтоб мой скрипт отбирал элементы только внутри этого блока и чтоб мне не пришлось переписывать все условия отбора внутри скрипта(чтоб отбор дальше шел вида $("input[id$=min]"), $(".my-class") и т.д.) ? Или мне придется переделать отбор всего внутри на вид вроде
$(".block").each( function() {
$(this).find("input[id$=min]")...
$(this).find(".my-class")...
Ответить с цитированием
  #2 (permalink)  
Старый 01.10.2012, 15:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Хоть бы пример какой тестовый сделал... А так - одна тарабарщина...
Ответить с цитированием
  #3 (permalink)  
Старый 01.10.2012, 16:41
Новичок на форуме
Отправить личное сообщение для zamanuha Посмотреть профиль Найти все сообщения от zamanuha
 
Регистрация: 01.10.2012
Сообщений: 3

Сообщение от ksa Посмотреть сообщение
Хоть бы пример какой тестовый сделал... А так - одна тарабарщина...
Упростил для понимания проблемы
Есть HTML
<div class="block">
  <div class="inner-1">
  </div>
  <div class="inner-2">
  </div>
</div>
<div class="block">
  <div class="inner-1">
  </div>
  <div class="inner-2">
  </div>
</div>

Есть скрипт (понято, что у меня больше и сложней, из-за чего не хочется перелопачивать весь)
$(".inner-1").click(function () {
      $(this).hide();
});
$(".inner-2").click(function () {
      $(this).hide();
});

Мне его нужно заставить отрабатывать каждый в своем блоке и при этом по возможности не изменять селекторы элементов. Решение типа этого(может оно и не рабочее, но мысль будет понятна):
$(".block").each(function(){
  $(this).find(".inner-1").click(function () {
      $(this).hide();
  });
  $(this).find(".inner-2").click(function () {
      $(this).hide();
  });
});

не подходит, так как нужно переделывать все селекторы $(".inner-1") -> $(this).find(".inner-1"). Есть ли решение, при котором я их смогу оставить не меняя.
Ответить с цитированием
  #4 (permalink)  
Старый 01.10.2012, 19:56
Аватар для antonM
Кандидат Javascript-наук
Отправить личное сообщение для antonM Посмотреть профиль Найти все сообщения от antonM
 
Регистрация: 11.08.2011
Сообщений: 103

zamanuha, а чем Вас не устраивает первый вариант скрипта. Он отрабатывается в своем блоке: http://jsbin.com/uqilar/1/
Ответить с цитированием
  #5 (permalink)  
Старый 01.10.2012, 23:06
Новичок на форуме
Отправить личное сообщение для zamanuha Посмотреть профиль Найти все сообщения от zamanuha
 
Регистрация: 01.10.2012
Сообщений: 3

Спасибо Вам! Вы очень мне помогли! как я раньше этого не видел
Ответить с цитированием
  #6 (permalink)  
Старый 02.10.2012, 08:58
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от zamanuha Посмотреть сообщение
Упростил для понимания проблемы
Есть HTML
<div class="block">
  <div class="inner-1">
  </div>
  <div class="inner-2">
  </div>
</div>
<div class="block">
  <div class="inner-1">
  </div>
  <div class="inner-2">
  </div>
</div>

Есть скрипт (понято, что у меня больше и сложней, из-за чего не хочется перелопачивать весь)
$(".inner-1").click(function () {
      $(this).hide();
});
$(".inner-2").click(function () {
      $(this).hide();
});
Но это вообще не работает...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(".inner-1").click(function () {
      $(this).hide();
});
$(".inner-2").click(function () {
      $(this).hide();
});
</script>
</head>
<body>
<div class="block">
  <div class="inner-1">1.1
  </div>
  <div class="inner-2">1.2
  </div>
</div>
<div class="block">
  <div class="inner-1">2.1
  </div>
  <div class="inner-2">2.2
  </div>
</div>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 02.10.2012, 09:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от zamanuha
Мне его нужно заставить отрабатывать каждый в своем блоке
С умением объяснять у тебя явно проблемы...

Что в итоге тебе хочется делать с ДИВами типа
<div class="inner-N">...</div>

Просто вскывать их при клике?
Ответить с цитированием
  #8 (permalink)  
Старый 02.10.2012, 09:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от zamanuha Посмотреть сообщение
Решение типа этого(может оно и не рабочее, но мысль будет понятна):
$(".block").each(function(){
  $(this).find(".inner-1").click(function () {
      $(this).hide();
  });
  $(this).find(".inner-2").click(function () {
      $(this).hide();
  });
});
Подход конечно ппц!

Вот альтернативный вариант...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function () {
	$(".block > div").each(function(){
	  $(this).click(function () {
	      $(this).hide();
	  });
	});
});
</script>
</head>
<body>
<div class="block">
  <div class="inner-1">1.1
  </div>
  <div class="inner-2">1.2
  </div>
</div>
<div class="block">
  <div class="inner-1">2.1
  </div>
  <div class="inner-2">2.2
  </div>
</div>
</body>
</html>
Ответить с цитированием
  #9 (permalink)  
Старый 02.10.2012, 09:11
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Вот вариант с небольшим усложнением...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function () {
	$(".block > div[class*='inner-']").each(function(){
	  $(this).click(function () {
	      $(this).hide();
	  });
	});
});
</script>
</head>
<body>
<div class="block">
  <div class="inner-1">1.1
  </div>
  <div class="inner-2">1.2
  </div>
</div>
<div class="block">
  <div class="inner-1">2.1
  </div>
  <div class="inner-2">2.2
  </div>
</div>
</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 02.10.2012, 09:12
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Ну и вовсе так

$(document).ready(function () {
	$(".block > div[class*='inner-']").click(function () {
		$(this).hide();
	});
});
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Collection – фреймворк для управления данными kobezzza Ваши сайты и скрипты 155 10.05.2013 08:59
Установка цвета через функцию .css() сбрасывает цвет для :hover xintrea jQuery 4 18.08.2012 15:38
Удалению метаданных в JPEG lorents Библиотеки/Тулкиты/Фреймворки 2 22.04.2012 21:02
Реализация игрового поля для игры "Точки" last-art Events/DOM/Window 7 22.04.2012 03:18
Userscript для скрытия блока MustDie Firefox/Mozilla 12 02.08.2010 14:54