한 DIV 요소를 다른 DIV 요소로 옮기고 싶습니다. 예를 들어, 이것을 옮기고 싶습니다 (모든 자식 포함).
<div id="source">
...
</div>
이것으로 :
<div id="destination">
...
</div>
그래서 나는 이것을 가지고 있습니다 :
<div id="destination">
<div id="source">
...
</div>
</div>
한 DIV 요소를 다른 DIV 요소로 옮기고 싶습니다. 예를 들어, 이것을 옮기고 싶습니다 (모든 자식 포함).
<div id="source">
...
</div>
이것으로 :
<div id="destination">
...
</div>
그래서 나는 이것을 가지고 있습니다 :
<div id="destination">
<div id="source">
...
</div>
</div>
답변:
일반 자바 스크립트를 사용해 본 적이 destination.appendChild(source);
있습니까?
onclick = function(){ destination.appendChild(source); }
div{ margin: .1em; }
#destination{ border: solid 1px red; }
#source {border: solid 1px gray; }
<!DOCTYPE html>
<html>
<body>
<div id="destination">
###
</div>
<div id="source">
***
</div>
</body>
</html>
onclick
를 접두사로 만들었습니다 var
.
appendTo
함수 를 사용하고 싶을 수도 있습니다 (요소 끝에 추가됨).
$("#source").appendTo("#destination");
또는 prependTo
함수를 사용할 수 있습니다 (요소의 시작 부분에 추가됨).
$("#source").prependTo("#destination");
예:
it will be moved into the target (not cloned) and a new set consisting of the inserted element is returned
- api.jquery.com
내 해결책 :
움직임:
jQuery("#NodesToMove").detach().appendTo('#DestinationContainerNode')
부:
jQuery("#NodesToMove").appendTo('#DestinationContainerNode')
.detach ()의 사용법에 유의하십시오. 복사 할 때 ID를 복제하지 않도록주의하십시오.
$('#nodeToMove').insertAfter('#insertAfterThisElement');
무엇에 대한 자바 스크립트 솔루션?
// Declare a fragment:
var fragment = document.createDocumentFragment();
// Append desired element to the fragment:
fragment.appendChild(document.getElementById('source'));
// Append fragment to desired element:
document.getElementById('destination').appendChild(fragment);
경우 div
당신이 당신의 요소를 넣어하려는 콘텐츠 내부를 가지고, 당신은 쇼 요소 원하는 이후 의 주요 내용 :
$("#destination").append($("#source"));
경우 div
당신이 당신의 요소를 넣어하려는 콘텐츠 내부를 가지고, 당신은 요소 보여주고 싶은 전에 주요 내용 :
$("#destination").prepend($("#source"));
경우 div
당신이 당신의 요소를 넣어 원하는 위치가 비어 있습니다, 또는 당신은 할 대체 를 완전히 :
$("#element").html('<div id="source">...</div>');
위의 요소 전에 요소를 복제하려는 경우 :
$("#destination").append($("#source").clone());
// etc.
빠른 데모와 요소 이동 방법에 대한 자세한 내용을 보려면 다음 링크를 시도하십시오.
http://html-tuts.com/move-div-in-another-div-with-jquery
다음은 간단한 예입니다.
요소 위로 이동하려면 :
$('.whatToMove').insertBefore('.whereToMove');
요소 다음에 이동하려면
$('.whatToMove').insertAfter('.whereToMove');
요소 내부로 이동하려면 해당 컨테이너 내부의 모든 요소를 살펴보십시오.
$('.whatToMove').prependTo('.whereToMove');
요소 내부로 이동하려면 해당 컨테이너 내부의 모든 요소 후에 :
$('.whatToMove').appendTo('.whereToMove');
다음 코드를 사용하여 소스를 대상으로 옮길 수 있습니다
jQuery("#source")
.detach()
.appendTo('#destination');
오래된 질문이지만 모든 이벤트 리스너를 포함하여 한 컨테이너에서 다른 컨테이너로 컨텐츠를 이동해야하기 때문에 여기에 도착했습니다 .
jQuery는 그것을 할 수있는 방법이 없지만 표준 DOM 함수 appendChild는 않습니다.
//assuming only one .source and one .target
$('.source').on('click',function(){console.log('I am clicked');});
$('.target')[0].appendChild($('.source')[0]);
appendChild를 사용하면 .source를 제거하고 이벤트 리스너를 포함하여 대상에 배치합니다. https://developer.mozilla.org/en-US/docs/Web/API/Node.appendChild
시도해 볼 수도 있습니다 :
$("#destination").html($("#source"))
그러나 이것은 당신이 가진 모든 것을 완전히 덮어 쓸 것입니다 #destination
.
insertAfter
& after
와 insertBefore
& 사이의 엄청난 메모리 누수 및 성능 차이를 발견했습니다 before
. DOM 요소가 많거나 MouseMove 이벤트 를 사용 after()
하거나 사용해야 before()
하는 경우 브라우저 메모리가 증가하고 다음 작업이 실제로 느리게 실행됩니다.
방금 경험 한 솔루션은 대신 inserBefore를 사용 before()
하고 insertAfter를 사용하는 것 after()
입니다.
appendChild()
메소드를 사용하여 순수한 JavaScript를 사용할 수 있습니다 ...
appendChild () 메소드는 노드를 노드의 마지막 자식으로 추가합니다.
팁 : 텍스트를 사용하여 새 단락을 만들려면 단락에 추가 할 텍스트 노드로 텍스트를 만든 다음 단락을 문서에 추가하십시오.
이 방법을 사용하여 한 요소에서 다른 요소로 요소를 이동할 수도 있습니다.
팁 : insertBefore () 메소드를 사용하여 지정된 기존 하위 노드 앞에 새 하위 노드를 삽입하십시오.
그래서 당신은 일을하기 위해 그렇게 할 수 있습니다. 이것은 내가 당신을 위해 만든 것입니다 appendChild()
.
function appendIt() {
var source = document.getElementById("source");
document.getElementById("destination").appendChild(source);
}
#source {
color: white;
background: green;
padding: 4px 8px;
}
#destination {
color: white;
background: red;
padding: 4px 8px;
}
button {
margin-top: 20px;
}
<div id="source">
<p>Source</p>
</div>
<div id="destination">
<p>Destination</p>
</div>
<button onclick="appendIt()">Move Element</button>
완성도를 위해서, 또 다른 접근 방식이 wrap()
나 wrapAll()
에 언급 된 이 문서 . 따라서 OP의 질문은 이것에 의해 해결 될 수 있습니다 (즉, <div id="destination" />
아직 존재하지 않는다고 가정하면 다음 접근법은 처음부터 그러한 래퍼를 생성합니다-OP는 래퍼가 이미 존재하는지 여부에 대해 명확하지 않았습니다) :
$("#source").wrap('<div id="destination" />')
// or
$(".source").wrapAll('<div id="destination" />')
유망한 소리. 그러나 $("[id^=row]").wrapAll("<fieldset></fieldset>")
다음과 같이 여러 개의 중첩 구조 를 수행하려고했을 때 :
<div id="row1">
<label>Name</label>
<input ...>
</div>
그것은 정확하게 그 래핑 <div>...</div>
및 <input>...</input>
하지만 어떻게 든 OUT LEAVES <label>...</label>
. 그래서 나는 $("row1").append("#a_predefined_fieldset")
대신 명시 적을 사용했습니다. YMMV입니다.