Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Родитель элимента (https://javascript.ru/forum/jquery/40750-roditel-ehlimenta.html)

kotkew 18.08.2013 18:41

Родитель элимента
 
Здравствуйте, уважаемые. Помогите разобраться. Необходимо при нажатии на один из нескольких одинаковых элементов скрыть родителя, а так же выяснить родителя у родителя и совершить некие действия с дочерними элементами.
$(this).parent().hide()

Не работает. (Почему?)

Заранее благодарен.

danik.js 18.08.2013 18:57

Цитата:

Сообщение от kotkew
Не работает. (Почему?)

Обычная причина - криворукость.


<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<fieldset>
    <legend>Родитель</legend>
    <button onclick="$(this).parent().hide()">Скрыть родителя</button>
</fieldset>

kotkew 18.08.2013 19:08

А что в этом коде не так?
$(function(){
            $(".option").click(function(){
                $(this).parent().hide();
            });
        });

danik.js 18.08.2013 20:19

Цитата:

Сообщение от kotkew
А что в этом коде не так?

Все так.


<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(function(){
            $(".option").click(function(){
                $(this).parent().hide();
            });
});
</script>
<fieldset>
    <legend>Родитель</legend>
    <button class="option">Скрыть родителя</button>
</fieldset>

Deff 18.08.2013 20:24

:( Родитель и алименты

kotkew 18.08.2013 20:34

Цитата:

Сообщение от danik.js (Сообщение 268059)
Все так.


<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(function(){
            $(".option").click(function(){
                $(this).parent().hide();
            });
});
</script>
<fieldset>
    <legend>Родитель</legend>
    <button class="option">Скрыть родителя</button>
</fieldset>

Но это как раз и не работает почему-то

kotkew 18.08.2013 20:38

Вот функция, которая открывает родительский элемент. Возможно какой-то конфликт?
$(".select").click(function(){
                    $('.selectList', this).show();
                }
            });


'.selectList' как раз тот родитель, который необходимо скрыть

danik.js 18.08.2013 20:48

Цитата:

Сообщение от kotkew
Но это как раз и не работает почему-то

То есть, пример, который я запостил у тебя не работает? Какой браузер?
Может у тебя доступ заблокирован к http://code.jquery.com/ ?

kotkew 18.08.2013 21:17

Цитата:

Сообщение от danik.js (Сообщение 268071)
То есть, пример, который я запостил у тебя не работает? Какой браузер?
Может у тебя доступ заблокирован к http://code.jquery.com/ ?

Ваш пример у меня работает, но с функцией, которую я указал выше, работать не хочет

danik.js 18.08.2013 21:38

Цитата:

Сообщение от kotkew
'.selectList' как раз тот родитель, который необходимо скрыть

В твоем коде .selectList не может быть родителем, так как ты ограничиваешь контекст поиска элементом this. Скорее всего тебе нужно
$(this).closest('.selectList') (или $(this).parents('.selectList'), но первое предпочтительней ).

kotkew 18.08.2013 21:46

Почему же? Структура следующая:
<div class="select">
 <div class="selectList">
  <span class="option">1</span>
  <span class="option">2</span>
  <span class="option">3</span>
  <span class="option">4</span>
  <span class="option">5</span>
 </div>
</div>

danik.js 18.08.2013 21:50

А, ну тогда ок. Только не show() а hide() ведь, не?

kotkew 18.08.2013 22:11

Цитата:

Сообщение от danik.js (Сообщение 268082)
А, ну тогда ок. Только не show() а hide() ведь, не?

апд
$(function(){
            $(".select").click(function(){
                if ($('.selectList', this).is(':visible')) {
                    $('.selectList', this).hide();
                } else {
                    $('.selectList', this).show();
                }
            });
        });

Такой получился скрипт. Как теперь можно определить, по какому из дочерних элементов .option был совершен клик?

danik.js 18.08.2013 22:44

$(".select").click(function(e){
    //e.target
...

Вся твоя портянка заменяется одной строчкой:
$('.selectList', this).toggle();

kotkew 18.08.2013 23:30

e.target ?
По-подробнее, пожалуйста

danik.js 18.08.2013 23:38

Цитата:

Сообщение от kotkew
Как теперь можно определить, по какому из дочерних элементов .option был совершен клик?

По-подробнее, пожалуйста

kotkew 19.08.2013 00:28

Разобрался, спасибо. Плюсанул в репу. Такой получился код:
$(function(){
            $(".select").click(function(e){
                $('.selectList', this).toggle();
                $('.selectText', this).text($(e.target).text());
            });
        });


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