Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Отображения элементов относительно друг (https://javascript.ru/forum/dom-window/50934-otobrazheniya-ehlementov-otnositelno-drug.html)

makarow.dmitry 17.10.2014 14:03

Отображения элементов относительно друг
 
Всем привет!
Не могу решить вопрос отображения элементов относительно друг друга.
Буду благодарен если подскажите.

1. Нужно чтобы при появлении одного элемента - все остальные скрывались. Делал так, но не выходит...
$(this).parents("#photo-block .brand-panel #hide").hide();


2. Перестала работать привязка элемента к другом, когда динамически генерирую контент. Нужно чтобы работало.
Статически работает вот так - http://teleport.ink/index_a.html

Вот функция.
function position()  {

                panel_info.position({
                    of: $(this),
                    my: "center center",
                    at: "center bottom+6",
                    collision: "flipfit",
                    within: image_mark
                });
}


Вот весь код JS
$(document).ready(function(){

	$(".mark-brand").click(function(){
            var panel_info = $(this).next('.brand-panel'); //Панель относящаяся к данной метке
            var switch_status = $(this).next('.brand-panel').attr("id"); //Берем значение переключателя
            var image_mark = $(this).siblings("#image");


            //Функция, которая приклеивает панель к метке.
            function position() {

                panel_info.position({
                    of: $(this),
                    my: "center center",
                    at: "center bottom+6",
                    collision: "flipfit",
                    within: image_mark
                });
            }

            //Взависимости от значения id либо скрываем, либо показываем панель
            if ( switch_status == "hide" ) {

                position();
                $(this).next('.brand-panel').attr("id","show");
                panel_info.show();
                $(this).parents("#photo-block .brand-panel #hide").hide(); //Здесь должны скрываться все панели с id hide 
                

            }
            else if ( switch_status == "show") 
            {
                panel_info.hide();
                $(this).next('.brand-panel').attr("id","hide");
            }



        });


});


А вот html
<div class="photo-block"> 



                            {% for tag in photo.get_tags %}

                            {% if tag.z_position == 1 %}                                             
                                <div class="mark-brand" style="top:{{ tag.y_position }}; left:{{ tag.x_position }};" id="{{ tag.id }}">
                                    <svg class="star-mark star-green-active" viewBox="0 0 105 105">
                                        <use xlink:href="#star-mark"></use>
                                    </svg>                          
                                </div>
                                <div class="brand-panel active" id="show">
                                    <a href="{{ tag.url }}">
                                        <p>{{ tag.brand_name }}</p>
                                        <div class="button-mark">
                                            <svg class="arrow-right-icon arrow-right-icon-green" viewBox="0 0 15.15 22">
                                            <use id="mark-close-use" xlink:href="#arrow-right-icon"></use>
                                            </svg>
                                        </div>
                                    </a>               
                                </div> 

                            {% else %}

                            <div class="mark-brand" style="top:{{ tag.y_position }}; left:{{ tag.x_position }};" id="{{ tag.id }}">
                                <svg class="star-mark" viewBox="0 0 105 105">
                                    <use xlink:href="#star-mark"></use>
                                </svg>                          
                            </div>
                            <div class="brand-panel position" id="hide">
                                <a href="{{ tag.url }}">
                                    <p>{{ tag.brand_name }}</p>
                                    <div class="button-mark">
                                        <svg class="arrow-right-icon arrow-right-icon-green" viewBox="0 0 15.15 22">
                                        <use id="mark-close-use" xlink:href="#arrow-right-icon"></use>
                                        </svg>
                                    </div>
                                </a>               
                            </div> 

                            {% endif %}
                                
                            {% endfor%}        
                        
                        <img src="/uploads/{{ photo.image }}" id="image"/>
                        <a href="/add/{{ item.id }}" class="button-add-edit" id="button-add-edit"></a> 
                           
                    </div>


Спасибо.

ksa 17.10.2014 14:06

Цитата:

Сообщение от makarow.dmitry
А вот html

Это не ХТМЛ... :no:

ksa 17.10.2014 14:07

Цитата:

Сообщение от makarow.dmitry
Перестала работать привязка элемента к другом, когда динамически генерирую контент.

Возможно когда "привязываешь" тех элементов еще нет на странице...

makarow.dmitry 17.10.2014 14:17

Цитата:

Сообщение от ksa (Сообщение 336206)
Возможно когда "привязываешь" тех элементов еще нет на странице...

А как же
$(document).ready()

Оно же должно работать только после загрузки.
Все элементы загружаются сразу...

ksa 17.10.2014 14:21

Цитата:

Сообщение от makarow.dmitry
Оно же должно работать только после загрузки.

Понятие "загрузки" у всех разное... :D

Что касается
Цитата:

Сообщение от makarow.dmitry
$(document).ready()

так оно наступает "по готовности документа"...

makarow.dmitry 17.10.2014 14:21

$(this).parents("#photo-block .brand-panel #hide").hide();

Вот это не работает.

И вот это position();

ksa 17.10.2014 14:22

makarow.dmitry, ты в состоянии сделать тестовый пример где проявляется твоя проблема?

makarow.dmitry 17.10.2014 14:32

Цитата:

Сообщение от ksa (Сообщение 336211)
makarow.dmitry, ты в состоянии сделать тестовый пример где проявляется твоя проблема?

$(this).parents("#photo-block .brand-panel #hide").hide(); - Вот это не работает. (т.е. не скрывает все элементы, кроме текущего).

position(); - также не делается свою задачу.

ksa 17.10.2014 14:46

makarow.dmitry, начнем с того, что это далеко не тестовый пример...

Но даже это уже показывает некую фигнотень. Поскольку селектор
#photo-block .brand-panel #hide

не может выбрать более одного элемента, потому, как заканчивается на селектор идентификатора - #hide.

makarow.dmitry 17.10.2014 17:56

Цитата:

Сообщение от ksa (Сообщение 336214)
makarow.dmitry, начнем с того, что это далеко не тестовый пример...

Но даже это уже показывает некую фигнотень. Поскольку селектор
#photo-block .brand-panel #hide

не может выбрать более одного элемента, потому, как заканчивается на селектор идентификатора - #hide.


C основными моментами разобрался.
Вот только не нашел решение одной проблемы:

Она возникает, когда генерируется контент, например аяксом. Все id и class такие же, как в рабочих элементах (которые сгенерировались при загрузке)
Пробовал load - но не сработало.

Может подскажите что я упускаю из основных моментов.
Спасибо


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