Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   поместить блок внутрь рядом с другими (https://javascript.ru/forum/misc/76372-pomestit-blok-vnutr-ryadom-s-drugimi.html)

Sergey1986 05.01.2019 19:35

поместить блок внутрь рядом с другими
 
Добрый день!
есть
<div id="menu">
<p>Привет</p>
</div>

$('body').on('click','#menu', function(event){

let html = 'ля ля';

$('<div/>', {

            }).css({
                    left: '20px', 
                    top: '20px' 
                })
                .appendTo($(event.target)) 
                .append(
                        html
                )

});

вот этот код внутрь p помещает div

вставить блок ряодм возле <p>Привет</p>

рони 05.01.2019 19:39

Sergey1986,
что хотите сделать, код html?

Sergey1986 05.01.2019 19:43

да
типа всплаывающие менюшку

Sergey1986 05.01.2019 19:45

.appendChild(
html
)

Sergey1986 05.01.2019 19:45

ругаеться

laimas 05.01.2019 19:58

$('<div/>', {
        left: '20px',
        top: '20px',
        html: html
    }).appendTo(this);

Sergey1986 05.01.2019 20:02

Спасибо!!!

laimas 05.01.2019 20:09

Sergey1986,
не правильно, я тоже просто скопировал, а нужно

$('<div/>', {
        style: 'left:20px;top:20px',
        html: html
    }).appendTo(this);


Либо

$('<div/>', {
        html: html
    }).appendTo(this).css({параметры}).и т.д.;


А вообще стили таким вещам задают в CSS, а вот размеры которые могут зависеть от содержания, позиционирование, это после добавления рассчитывают.

рони 05.01.2019 20:23

Цитата:

Сообщение от laimas
Либо

$('<div/>', {css : {
        left: '20px',
        top: '20px'},
        html: html
    }).appendTo(this);

laimas 05.01.2019 20:35

рони, а смысл? Тут ведь тоже "ля ля пример", а что на самом деле хотят не известно, может все таки css({left: function() {}, ... нужен будет? А позицию по умолчанию лучше в css.

Sergey1986 05.01.2019 21:41

Пытаюсь создать типа контекстного меню на js + jqery

на элемент вешаю слушателя

$('body').on('click','#menu-open', function(event){....

и в html

<div id = menu-open>
<p>открыть меню</p>
</div>

рядом c <p>, положить новый div в котором менюшка (всплывающая и относительно этого блока)

через this все, только вот теперь при выборе элемента из этого меню....она вновь переоткрываеться...хм...

laimas 05.01.2019 22:07

А почему обработка щелчка по menu-open делегируется, он что добавляется динамически?

laimas 05.01.2019 23:29

Цитата:

Сообщение от Sergey1986
через this все, только вот теперь при выборе элемента из этого меню....она вновь переоткрываеться

Все равно не понятно чего хочется. Во-первых почему все таки делегирование обработчика причем прапрадедушке. Во-вторых почему добавляется. Если строится некое меню, то его можно на чистом css сделать.

Допустим, что так надо и это уже есть на странице, тогда:

<div id="menu"><p>Open</p></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$('#menu').click(function(){
    $('<ul style="display:none;"><li>111111</li><li>222222</li></ul>') 
        .appendTo(this) //добавили контент
        .slideDown().click(function(e) { //показали его и определили выбор в нем
            e.stopPropagation(); //запретили всплытие события
            console.log($(e.target).text()); //что-то выполнили по выбору
            $(this).slideUp(function() { //спрятали контент
                $(this).remove() //удалили контент, правда это будет оправдано если контент различен 
            })
        })
});
</script>

Sergey1986 05.01.2019 23:49

$('body').on('click','#menu-open' --- "прапрадедушке, к примеру если таких 10ток таких же ссылок или элемнтов, кторые могут открыть менюшку (т.е. на перед мне не известно)...вот и прадедушке делегирую...

laimas 05.01.2019 23:58

Цитата:

Сообщение от Sergey1986
к примеру если таких 10ток

Таких даже два не может быть, не говоря уже о более, id - это есть и должно быть уникальным значением. А менюшка менюшке рознь. К примеру, есть N строк, которые в атрибуте содержат как json значение, которое является контентом для контекстного меню. В этом случае оправдано добавление/удаление такого контента в раскрывающееся меню. Сам контейнер меню уже может быть на странице и добавляться/показываться у строки выбранной. В противном случае не понятно чего и зачем.

Sergey1986 06.01.2019 00:02

понимаю что одинаковых id быть не моежт документе html
но к примеру есть 5 сылок которые при нажатии на них должны запустить одну и ту же функцию...можно же сделать
$('body').on('click','#zapusk', function(event){....

и js отработает

Sergey1986 06.01.2019 00:05

и вот почему еще дедушке делегируем...сервер отдает html без этой id = menu, она потом появляеться (сервер досылает...) когда пользователь начинает работать

laimas 06.01.2019 00:12

Цитата:

Сообщение от Sergey1986
есть 5 сылок

Цитата:

Сообщение от Sergey1986
$('body').on('click','#zapusk'

Цитата:

Сообщение от Sergey1986
и js отработает

Чушь полнейшая - браузер знает, что id, это уникальный идентификатор и найдя на странице первый таковой назначит ему обработчик, искать еще таковые он не станет, для него это лишено смысла, именно по этому выбор по id несколько быстрее производится.

Попробуйте щелкнуть по второй ссылке, получится?

<a id="a1" href="#">Link1</a>
<a id="a1" href="#">Link2</a>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$('#a1').click(function(e) {
    e.preventDefault();
    alert($(this).text())
})
</script>

Sergey1986 06.01.2019 00:15

Вы, все верно говорите, про id!

Sergey1986 06.01.2019 00:16

как тут так делать что бы код исполнялся...:)

laimas 06.01.2019 00:16

Цитата:

Сообщение от Sergey1986
сервер отдает html без этой id = menu, она потом появляеться

Здесь ключевым должно быть "появляется в чем?". Просто делегировать нужно всегда самому ближайшему родителю присутствующему на странице.

Sergey1986 06.01.2019 00:19

но если построить вот такую конструкцию
$('body').on('click','#show', function(){
alert($(this).attr('view');)
});

<a href="#" id="show" view="ляля"></a>
<a href="#" id="show" view="123"></a>
<a href="#" id="show" view="лял321я"></a>

она сработает и можно вытащить данные

laimas 06.01.2019 00:23

Цитата:

Сообщение от Sergey1986
она сработает и можно вытащить данные

Это называется через задницу ;) Сдается мне, что вы делаете что-то не так как полагается, хотя я и не представляю чего вы делаете.

Sergey1986 06.01.2019 00:25

ну да через нее...пока работает...не трогую...
го...проекты

Sergey1986 06.01.2019 00:25

чем чревато если так оставить?

laimas 06.01.2019 00:40

Цитата:

Сообщение от Sergey1986
чем чревато если так оставить?

Это зависит от общей картины на странице, а вообще, не соблюдение Закона, в зависимости от статьи, это от К до М лет строго режима. ;)

Мы человеки, а человекам свойственно рассуждать, а рассуждая разве сложно понять, что видя перед собою огурец, помидор, тыкву, убеждать себя, что они все баклажаны, является чистой воды глупостью?

С какого перепуга вы решили все элементы коллекции (а у вас коллекция) обозвать одним уникальным идентификатором? Что нет других признаков, которые бы их объединяли, например имя класса? И почему все таки body, а не иное, да и вообще почему именно делегирование?

Трудно искать черную кошку в темной комнате, так и мне сложно что-то сказать, не зная что у вас творится.


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