Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery:append - Копировать блок <div> (https://javascript.ru/forum/jquery/25742-jquery-append-kopirovat-blok-div.html)

lamer 14.02.2012 04:16

jQuery:append - Копировать блок <div>
 
И снова здрасти :)
Не неделя выдалась, а одни баги) Ситуация такая, в HTML странице есть несколько <div> блоков, у каждого из них уникальный id.

Мне нужно взять эти блоки по id и поместить их в другую часть странице сайта. Подобное реализовано по средствам jQuery:append

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>

  <script>

  $(document).ready(function(){
    $("p").append("<div id='info'>Hello</div>");
  });
  </script>
  <style>p { background:yellow; }</style>

</head>
<body>
  <p>I would like to say: </p>
</body>
</html>


Но тут нужно вставлять весь текст а не просто имя идентификатора id.
Подскажите как подправить чтоб можно было указать имя id и эти блоки с содержимым были скопированы в другое место сайта ?

lamer 14.02.2012 05:45

Похоже понедельник прошел и все стала на круги своя :)
Решение найдено:

<html>

<head>

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function cloNeN() {
$("#container").clone()        		// сделаем копию элемента Привет, Пока, Привет
.addClass("newElement")         // добавим этой копии класс newElement
.appendTo("#clone");        // вставим измененный элемент в конец элемента clone
}
</script>

</head>

<body onload="cloNeN()">

<div id="container">
<div id="ih" class="hello">Привет</div>
<div id="ih1" class="goodbye">Пока</div>
<div id="ih2" class="hello">Привет</div>
</div>

</br>

<div id="clone"></div>

</body>

</html>


Результат:

Цитата:

<div id="clone"><div id="container" class="newElement">
<div class="hello" id="ih">Привет</div>
<div class="goodbye" id="ih1">Пока</div>
<div class="hello" id="ih2">Привет</div>
</div></div>
НО у меня не получилось клонировать несколько <div> сразу, т.е. я хотел клонировать <div> с идентификаторами id="ih", id="ih1", id="ih2" НО почему то не чего не вышло, поэтому и пришлось клонировать id="container"

Может кто знает как клонировать несколько идентификаторов сразу ?

skfyann 14.02.2012 06:56

$("#ih, #ih1, #ih2").clone().addClass("newElement").appendTo("#clone");

lamer 14.02.2012 12:27

Цитата:

Сообщение от skfyann (Сообщение 157310)
$("#ih, #ih1, #ih2").clone().addClass("newElement").appendTo("#clone");

Cпасибо :)

Столкнулся ещё с небольшой проблемкой, пытаюсь взять текст с <div id="donor">Test Clone</div> и клонировать его в значения value="" т.е. чтоб получилось value="Test Clone"
Вот как реализовываю:

<html>

<head>

<script src="http://code.jquery.com/jquery-latest.js"></script>

<script>
function cloNeN() {
$("#clonevalue").attr({value: "", value: $("#donor")});
}
</script>

</head>

<body onload="cloNeN()">

<div id="donor">Test Clone</div>
</br>
<input type="text" id="clonevalue" value="">

</body>

</html>


Но результат выходит такой: value="[object Object]"
Подскажите плиз где ошибка ?

skfyann 14.02.2012 13:13

$("#clonevalue").attr({value: "", value: $("#donor")});

И как это по вашему должно работать?
Скорее всего понадобится .val() и .text(), если я правильно понял что нужно.

lamer 14.02.2012 13:15

Цитата:

Сообщение от skfyann (Сообщение 157340)
$("#clonevalue").attr({value: "", value: $("#donor")});

И как это по вашему должно работать?
Скорее всего понадобится .val() и .text(), если я правильно понял что нужно.

ммм, что то не пойму, как тогда составить функцию ?

skfyann 14.02.2012 13:25

Цитата:

Сообщение от lamer (Сообщение 157341)
ммм, что то не пойму, как тогда составить функцию ?

1. Не, я второе решение подряд писать не буду. Вы не ответили на вопрос, что же должно происходить по тому куску кода, который я приводил. А если Вы не хотите разбираться, то так дело не пойдет.:no:

lamer 14.02.2012 13:39

Цитата:

Сообщение от skfyann (Сообщение 157345)
1. Не, я второе решение подряд писать не буду. Вы не ответили на вопрос, что же должно происходить по тому куску кода, который я приводил. А если Вы не хотите разбираться, то так дело не пойдет.:no:

По коду я все сразу написал:
Цитата:

Пытаюсь взять текст с <div id="donor">Test Clone</div> и клонировать его в значения value="" т.е. чтоб получилось value="Test Clone"
На счет кода как должен работать

Цитата:

Сообщение от skfyann (Сообщение 157340)
$("#clonevalue").attr({value: "", value: $("#donor")});

И как это по вашему должно работать?
Скорее всего понадобится .val() и .text(), если я правильно понял что нужно.

Находит id="clonevalue" делает значение value="" пустым и заполняет его текстом который берет с id="donor"
Все просто :) Но почему то не работает.

skfyann 14.02.2012 14:05

Цитата:

Сообщение от lamer (Сообщение 157347)
Находит id="clonevalue" делает значение value="" пустым.

Посмотрите что такое .val() и как он работает. Ссылка была выше.
$("#donor");

Вот таким образом вы получите объект, а не его текст. Попытавшись вывести его (что, фактически и происходит) Вы получаете строчку "[object Object]". Для того чтобы найти "внутренности" полученного объекта надо воспользоваться функцией .text(), ссылка опять же дана выше (есть еще функция .html(), но сейчас она не нужна).

Немного чтения документации и действительно будет все просто. И будет работать впридачу.

lamer 14.02.2012 14:06

Нашел ошибку свою, вообще не так функцию составил :)
Спасибо skfyann за наводку.
Собственно решение:

<html>

<head>

<script src="http://code.jquery.com/jquery-latest.js"></script>

<script>
function cloNeN() {
var text = $("#donor").text();
$("#clonevalue").val(text);
}
</script>

</head>

<body onload="cloNeN()">

<div id="donor">Test Clone</div>
</br>
<input type="text" id="clonevalue" value="">

</body>

</html>

lamer 14.02.2012 14:08

Цитата:

Сообщение от skfyann (Сообщение 157352)
Посмотрите что такое .val() и как он работает. Ссылка была выше.
$("#donor");

Вот таким образом вы получите объект, а не его текст. Попытавшись вывести его (что, фактически и происходит) Вы получаете строчку "[object Object]". Для того чтобы найти "внутренности" полученного объекта надо воспользоваться функцией .text(), ссылка опять же дана выше (есть еще функция .html(), но сейчас она не нужна).

Немного чтения документации и действительно будет все просто. И будет работать впридачу.

Блин) Вы запостили месагу раньше на 1 минуту чем я :)
Спасибо уже разобрался

lamer 15.02.2012 02:51

Вопрос не закрыт :(
По мимо того что нужно было скопировать несколько <div> элементов с одной части странице в другую, нужно было некоторые из них изменить, а точнее изменить их class=""

У меня получается не понятно что, если я не изменяю класс то <div> клонируется нормально, если изменяю его то часть <div> переноситься (т.е. вырезается со старого места и вставляется в новое)

Пример кода:

<html>

<head>

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function cloNeN() {
$("#top").clone()             				 // сделаем копию элемента top
$("#ding").removeClass("nIn0", false) 	 // удалит все классы у элемента с идентификатором ding
$("#ding").addClass("nIn01")         // добавим этой копии класс nIn01
.appendTo("#clone");          	  // вставим измененный элемент в конец элемента clone
}
</script>


</head>

<body onload="cloNeN()">
<div id="top">
  <div id="logo" class="logo">
    <img src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif" alt="" style="cursor: prn;">
  </div>
  <div id="ding" class="nIn0">
    <div id="ins" class="">
      Logon 
      <span class="local">127 0 0 1</span>
    </div>
  </div>
</div>  


</br>

<div id="clone"></div>


</body>

</html>


Помогите плиз, сломал голову но не чего не выходит, подозреваю что это из-за того что клонирую я <div id="top">, а класс меняю в дочернем диве. Потому что если не производить не каких манипуляций кроме клонирование то все нормально, может не верно составил функцию ?

Люди добрые подскажите :(

skfyann 15.02.2012 15:01

Что же вы делаете на самом деле:
1. Клонируете элемент с id = top, не предпринимая с ним никаких действий.
2. Берете элемент, отнимаете у него класс. Что тут значит второй параметр - непонятно.
3. Даете этому элементу новый класс и перемещаете в другой див.

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

lamer 15.02.2012 18:26

Цитата:

Сообщение от skfyann (Сообщение 157595)
Что же вы делаете на самом деле:
1. Клонируете элемент с id = top, не предпринимая с ним никаких действий.
2. Берете элемент, отнимаете у него класс. Что тут значит второй параметр - непонятно.
3. Даете этому элементу новый класс и перемещаете в другой див.

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

Да я понимаю это все, и знаю что означают те куски кода что я написал, для наглядности я подписал что они выполняют.

<div id="top"> в нем содержаться ещё дивы над которыми нужно произвести манипуляцию, но я не знаю как указать на них.
Пробовал так указать: $("#ding")
Но это не правильно, нужно как то указать что в диве id="top" находиться ещё один див с id="ding" над которым нужно произвести изменение.
Вопрос в том как это указать ???

skfyann 15.02.2012 20:53

Не уверен, что изучение JS нужно начинать c jQuery.
.children()
.find()

lamer 16.02.2012 16:12

Цитата:

Сообщение от skfyann (Сообщение 157701)
Не уверен, что изучение JS нужно начинать c jQuery.
.children()
.find()

Сделал с помощью .find()
Но возникла проблема при изменении класса с nIn0 на nIn01.
По средствам .toggleClass("nIn0 nIn01") не получается сделать, т.к. в моей функции не могу указать идентификатор, т.е. написать вот так: $("#ding").toggleClass("nIn0 nIn01")
ПОМОГИТЕ закончить функцию, чтоб в клонированных элементах менялся класс с nIn0 на nIn01. Спасибо.

<html>

<head>
<style type="text/css">
.nIn01 { color: "#FF0000" }
</style>

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function cloNeN() {
$("#top").find("#logo, #ding, #ins")	// Ищем идентификаторы #logo, #ding, #ins в элементе #top
.clone()							   // Клонируем найденые элементы
.toggleClass("nIn0 nIn01")            // Заменяем в клоне класс .nIn0 на .nIn01
.appendTo("#clone");          	  	 // Вставим измененный элемент в конец элемента clone
}
</script>


</head>

<body onload="cloNeN()">
<div id="top">
  <div id="logo" class="logo">
    <img src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif" alt="" style="cursor: prn;">
  </div>
  <div id="ding" class="nIn0">
    <div id="ins">
      Logon 
      <span class="local">127 0 0 1</span>
    </div>
  </div>
</div>  


</br>

<div id="clone"></div>


</body>

</html>

lamer 18.02.2012 03:25

Люди помогите закончить функцию, не получается менять в клоне класс class="nIn0" на class="nIn01"
Как реализовать ? Помогите...


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