11.11.2016, 02:43
|
Аспирант
|
|
Регистрация: 11.10.2010
Сообщений: 60
|
|
Jquery, найти ближайший соседний элемент с классом
Добрый день!
Есть простой код. При клике по любому 123 происходит отображение/скрытие всех блоков под ними. Мне же надо, чтобы отображение скрытие было только ближайшего блока, находящегося под 123, на который кликнули.
Если я заменяю siblings на next, а также удаляю теги BR, то всё работает. Но необходимо, чтобы работало именно с этой вёрсткой. Подскажите, плз.
Вот код
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<ul>
<li><br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
<br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
<br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
</li>
</ul>
</body>
</html>
$(function() {
$(".moveout_go").on('click', function(){
var $this = $(this), $moveout_body = $(this).siblings('.moveout_body');
if ($moveout_body.is(":hidden")) {
$moveout_body.slideDown(200);
} else {
$moveout_body.slideUp(200);
}
return false;
});
});
|
|
11.11.2016, 03:30
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 458
|
|
eddin, .next('.moveout_body')
$('.moveout_go').on('click', function () {
$(this).next('.moveout_body').slideToggle(200);
});
Последний раз редактировалось Rise, 11.11.2016 в 03:34.
|
|
11.11.2016, 03:42
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Rise,
Сообщение от eddin
|
удаляю теги BR, то всё работает. Но необходимо, чтобы работало именно с этой вёрсткой.
|
|
|
11.11.2016, 03:51
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
$('.moveout_go').on('click', function () {
//1 вариант
//2 вариант
//3 вариант
});
</script>
</head>
<body>
<ul>
<li><br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
<br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
<br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
</li>
</ul>
</body>
</html>
|
|
11.11.2016, 09:25
|
Аспирант
|
|
Регистрация: 11.10.2010
Сообщений: 60
|
|
Эх..., неужели нельзя сделать? По сути получается, что при нажатии на "123" надо просто найти ближайший соседний элемент, идущий следующим, с классом moveout_body и сработать на нём. Неужто в Jquery нет такого?
Сообщение от Rise
|
пусть span на div заменит и все br удалит они там не нужны)
|
к сожалению, вёрстка должна оставаться изначальной.
рони, ваш последний вариант. Дело в том, что неизвестно количество пунктов.
|
|
11.11.2016, 09:33
|
Аспирант
|
|
Регистрация: 11.10.2010
Сообщений: 60
|
|
Сообщение от Rise
|
eddin, ну сделай два некста подряд не тупи...
|
не грубите. а два некста - это очень негибко. там BR может быть иногда больше одного. Да, я написал, что вёрстка должна быть именно такой, но просто рассчитывал, что будет предложен какой-то более универсальный вариант.
|
|
11.11.2016, 09:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от eddin
|
Неужто в Jquery нет такого?
|
Сообщение от рони
|
//1 вариант //2 вариант //3 вариант
|
а может и больше вариантов решения
надо только почитать документацию на css и jquery
Последний раз редактировалось рони, 11.11.2016 в 09:50.
|
|
11.11.2016, 09:52
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
eddin,
варианты 1,2,3 это чуть-чуть исправленные варианта Rise, может кто-то ещё предложит своё решение?
|
|
11.11.2016, 10:51
|
Аспирант
|
|
Регистрация: 11.10.2010
Сообщений: 60
|
|
Сообщение от рони
|
а может и больше вариантов решения
надо только почитать документацию на css и jquery
|
Ну CSS я знаю очень хорошо, а jquery читал конечно, но что-то не нашел подходящего варика.
Ещё на ум приходит вариант просто пересчитывать moveout_go и moveout_body, ну и раскрывать тот moveout_body, который будет с таким же индексом, что и moveout_go. Но это каким-то извращением попахивает, да и ресурсоёмкая штука мне кажется получится.
|
|
11.11.2016, 10:53
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от рони
|
может кто-то ещё предложит своё решение?
|
Мне понравился твой вариант, предложенный в другой теме...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://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'>
.moveout_body {
display: none;
}
</style>
<script type='text/javascript'>
$(function(){
var go=$('.moveout_go');
var bd=$('.moveout_body');
$('.moveout_go').on('click', function () {
//1 вариант
var i=go.index(this);
bd.eq(i).slideToggle(200);
});
});
</script>
</head>
<body>
<ul>
<li><br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
<br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
<br>
<span class="moveout_go">123</span><br>
<div class="moveout_body">456</div>
</li>
</ul>
</body>
</html>
Но чем провинились нексты у ТСа, я х/з...
P.S.
Это не верстка, а черти что!
|
|
|
|