Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Клонирование дочерних элементов в списке одинаковых родителей (https://javascript.ru/forum/jquery/69814-klonirovanie-dochernikh-ehlementov-v-spiske-odinakovykh-roditelejj.html)

emptyindorill 19.07.2017 13:26

Клонирование дочерних элементов в списке одинаковых родителей
 
Добрый день.

Есть список вида:
<div class="parent">
<div class="link"><a href="/page1.php" class="child">page1</a></div>
<div class="inner"></div>
</div>
<div class="parent">
<div class="link"><a href="/page2.php" class="child">page2</a></div>
<div class="inner"></div>
</div>
<div class="parent">
<div class="link"><a href="/page3.php" class="child">page3</a></div>
<div class="inner"></div>
</div>


Нужно клонировать .child и поставить клон после .inner так что бы внутри первого .parent стоял клон .child, который находится внутри него.

А внутри второго .parent стоял клон второго .child

Пробовал так -
$(".link").parent().find("a.child").clone().appendTo(".link").parent();


Выводит все .child в каждый .parent

Подскажите пожалуйста, как такое реализовать?

Manyasha 19.07.2017 13:45

emptyindorill,
здравствуйте, так нужно?
$(".link").each(function(){
  $(this).parent().find("a.child").clone().appendTo($(this).parent())
})

laimas 19.07.2017 13:46

Manyasha,
зачем, тогда так:

$('.parent').append(function() {
   return $(this).children('.link').clone()
})

emptyindorill 19.07.2017 14:15

Спасибо большое, работает.

laimas 19.07.2017 14:19

Цитата:

Сообщение от emptyindorill
работает

Интересно, зачем клонировать ссылки?

emptyindorill 19.07.2017 14:19

Спасибо большое.

emptyindorill 19.07.2017 14:29

Цитата:

Сообщение от laimas (Сообщение 459016)
Интересно, зачем клонировать ссылки?


Это решение одной очень хитрой задачи в Confluence.
Нужно сделать что бы в списке новостей была кнопка читать далее и отображалась не полная новость.
Но есть 3 но:
- у меня нет доступа к основным скриптам движка,
- в Confluence нет такого функуционала для макроса вывода новостей по умолчанию,
- и третее - никто из ИТ не будет делать такое, и так же не будут искать-покупать-устанавливать-настраивать плагин расширяющий функционал модуля новостей потому что - и далее следует список из 100 причин.

В общем, обычная картина в России - задачу нужно выполнить, но инструментов мы вам не дадим, ещё и по рукам бить будем, в случае неудачи - вина полностью на вас)

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

laimas 19.07.2017 14:32

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

emptyindorill 19.07.2017 14:48

Цитата:

Сообщение от laimas (Сообщение 459023)
emptyindorill,
это описание не поясняет клонирование ссылки. Есть ссылки, они доступны, после клонирования их будет каждой по 2 штуки, зачем?

Для того что бы сделать ссылку которая будет имитацией кнопки Читать далее.

laimas 19.07.2017 14:52

Цитата:

Сообщение от emptyindorill
Для того что бы сделать ссылку которая будет имитацией кнопки Читать далее.

А первая что будет имитировать? Вы же понимаете, что клон, это 100% близнец (о событиях и прочем опустим), кнопкой вторая ссылка не станет автоматически, и нафиг она нужна вообще, можно и имеющуюся ссылку превратить в кнопку.

emptyindorill 19.07.2017 14:59

Цитата:

Сообщение от laimas (Сообщение 459026)
А первая что будет имитировать? Вы же понимаете, что клон, это 100% близнец (о событиях и прочем опустим), кнопкой вторая ссылка не станет автоматически, и нафиг она нужна вообще, можно и имеющуюся ссылку превратить в кнопку.

Первая ничего не будет имитировать, первая заголовок, h4, ссылка внутри которого будет неактивна (pointer-event: none;), событий никаких и не надо, нужен именно клон ссылки заголовка что бы на основе его сделать то, чего изначально в системе нет.

А имеющуюся ссылку кнопкой сделать нельзя, для неё у "дизайнера" другое исполнение.

Увидев макет я сказал сразу - нет в функционале кнопки читать далее, и она и не нужна, потому что заголовок ссылка.
Мне ответили - директор хочет так, и никак иначе. Заголовок не ссылкой и что бы было читать далее.

Сам не рад что так приходится изгаляться.

laimas 19.07.2017 15:05

Цитата:

Сообщение от emptyindorill
Первая ничего не будет имитировать, первая заголовок, h4

Вторая при клонировании тоже будет заголовком-ссылкой, это что до сих пор не понятно? Если требуется создать кнопку-ссылку, то нужно не клонировать блок со ссылкой-заголовком, а брать у этих ссылок только href, который указывать добавляемой (не клонируемой) ссылке, кнопкой которую можно превратить и в CSS.

emptyindorill 19.07.2017 15:24

Цитата:

Сообщение от laimas (Сообщение 459028)
Вторая при клонировании тоже будет заголовком-ссылкой, это что до сих пор не понятно? Если требуется создать кнопку-ссылку, то нужно не клонировать блок со ссылкой-заголовком, а брать у этих ссылок только href, который указывать добавляемой (не клонируемой) ссылке, кнопкой которую можно превратить и в CSS.

Точно... Я понял что вы имеете ввиду)

То что клон тоже является ссылкой из-заголовка то я понимаю.

Я как то не подумал что можно просто взять href, в нужное место блока новости вставить .html() и в этот html вставить href из ссылки-заголовка)

Но в принципе меня и нынешний вариант тоже устраивает.
Строчка jquery, 2 строчки css и всё - желаемый результат достигнут.

laimas 19.07.2017 15:31

Цитата:

Сообщение от emptyindorill
Но в принципе меня и нынешний вариант тоже устраивает

Думать надо, а не ..., клонирование здесь не к месту:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
.btn-link {
    display: inline-block;
    padding: 0 5px;
    border: 1px solid #ddd;
    border-radius: 3px;
    background-color: #eee;
    color: #aaa;
    text-decoration: none;
}

.btn-link:hover {
    color: #777;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    $('div.parent').append(function() {
        return $('<a>', {'href': $(this).find('a')[0].href, 'class': 'btn-link', 'text': 'Читать далее'}) 
    })
});
</script>
</head>
<body>
<div class="parent">
    <div class="link"><a href="/page1.php" class="child">page1</a></div>
    <div class="inner">Content</div>
</div>
<div class="parent">
    <div class="link"><a href="/page2.php" class="child">page2</a></div>
    <div class="inner">Content</div>
</div>
<div class="parent">
    <div class="link"><a href="/page3.php" class="child">page3</a></div>
    <div class="inner">Content</div>
</div>
</body>
</html>

emptyindorill 19.07.2017 15:37

Цитата:

Сообщение от laimas (Сообщение 459032)
Думать надо, а не ..., клонирование здесь не к месту:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
.btn-link {
    display: inline-block;
    padding: 0 5px;
    border: 1px solid #ddd;
    border-radius: 3px;
    background-color: #eee;
    color: #aaa;
    text-decoration: none;
}

.btn-link:hover {
    color: #777;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    $('div.parent').append(function() {
        return $('<a>', {'href': $(this).find('a')[0].href, 'class': 'btn-link', 'text': 'Читать далее'}) 
    })
});
</script>
</head>
<body>
<div class="parent">
    <div class="link"><a href="/page1.php" class="child">page1</a></div>
    <div class="inner">Content</div>
</div>
<div class="parent">
    <div class="link"><a href="/page2.php" class="child">page2</a></div>
    <div class="inner">Content</div>
</div>
<div class="parent">
    <div class="link"><a href="/page3.php" class="child">page3</a></div>
    <div class="inner">Content</div>
</div>
</body>
</html>

Понял Вас.

Спасибо за наставление)

laimas 19.07.2017 15:41

Цитата:

Сообщение от emptyindorill
Понял Вас

Это хорошо, но не повод цитировать все, зачем создавать портянки. ;)


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