이 게시물에서는 JavaScript에서 객체에 요소를 추가하거나 제거하는 방법을 알려드리고자 합니다. 매우 간단하지만 이전에 저처럼 많은 초보자들이 종종 이것에 혼란스러워합니다.

예제 객체를 만들어 봅시다.

var obj = (이름: "알렉스", 성: "페트로프", 웹사이트: "사이트", );

우리는 이름(이름), 성(성) 및 웹사이트(웹사이트)와 같은 데이터가 있는 간단한 개체를 가지고 있습니다. 데이터는 절대적으로 무엇이든 될 수 있지만 이 기록의 목적을 위해 그것은 단지 그것일 것입니다.

새 요소 추가

obj.country = "엔"; // 추가하다 새 키"국가"를 값이 "ru"인 개체로 변환 obj["city"] = "Moscow"; // 값이 "Moscow"인 "city"만 새 키를 추가합니다.

위의 코드에서는 모든 것이 명확하지만 명확하게 하기 위해 "."를 사용하여 개체 구문의 개체에 새 값을 추가할 수 있습니다. 및 키 또는 일반적인 배열 형식입니다. 배열로 선언하면 이전에 () 덕분에 그렇게 지정했기 때문에 obj는 여전히 객체입니다.

개체 안에 개체 만들기

obj.other_obj = (); // obj에 새로운 값 other_obj를 생성하고 객체로 만듭니다.

이제 여기에 데이터를 추가해 보겠습니다.

Obj.other_obj.first = "새 개체의 첫 번째 키"; obj.other_obj.second = "두 번째";

other_obj 내부에 첫 번째와 두 번째 두 개의 새로운 값을 생성했습니다.

요소 제거

obj.name 삭제; // true를 반환

객체에서 요소를 제거할 수 있는 delete 를 사용할 수 있습니다. 이 방법으로 전체 개체를 삭제할 수는 없지만 필요한 경우 다음과 같이 할 수 있습니다.

obj = (); // 객체를 다시 비워둡니다.

그게 전부입니다. JavaScript의 개체에 대해 여전히 질문이 있는 경우 아래에 의견을 작성해 주시면 도와드리겠습니다.



js 요소 제거 (12)

1단계. 요소 준비:

var 요소 = document.getElementById("ElementToAppendAfter"); var newElement = document.createElement("div"); var elementParent = element.parentNode;

2단계. 다음에 추가:

elementParent.insertBefore(newElement, element.nextSibling);

JavaScript에는 insertBefore()가 있지만 요소를 어떻게 삽입합니까? ~ 후에없는 다른 요소 jQuery를 사용하여아니면 다른 도서관?

스트레이트 JavaScript는 다음과 같습니다.

추가하다:

Element.parentNode.insertBefore(newElement, 요소);

다음에 추가:

Element.parentNode.insertBefore(newElement, element.nextSibling);

그러나 사용하기 쉽도록 일부 프로토타입을 거기에 던집니다.

다음 프로토타입을 생성하면 새로 생성된 요소에서 직접 이 함수를 호출할 수 있습니다.

    newElement.appendBefore(요소);

    newElement.appendAfter(요소);

.appendBefore(요소) 프로토타입

Element.prototype.appendBefore = 함수(요소) ( element.parentNode.insertBefore(this, element); ), false;

.appendAfter(요소) 프로토타입

Element.prototype.appendAfter = 함수(요소) ( element.parentNode.insertBefore(this, element.nextSibling); ), false;

작동 중인 모든 것을 보려면 다음 코드 스니펫을 실행하세요.

/* NeighborElement BEFORE 앞에 요소 추가 */ Element.prototype.appendBefore = function(element) ( element.parentNode.insertBefore(this, element); ), false; /* NeighborElement 이후 요소 추가 */ Element.prototype.appendAfter = function(element) ( element.parentNode.insertBefore(this, element.nextSibling); ), false; /* 일반적인 생성 및 설정 새 분리된 요소 개체 */ var NewElement = document.createElement("div"); NewElement.innerHTML = "새 요소"; NewElement.id = "NewElement"; /* 앞서 언급한 프로토타입을 사용하기 전에 -또는- 후에 NewElement 추가 */ NewElement.appendAfter(document.getElementById("Neighbor2")); div ( text-align: center; ) #Neighborhood ( color: brown; ) #NewElement ( color: green; )

이웃 1
이웃 2
이웃 3

이상적으로 insertAfter는 MDN과 유사하게 작동해야 합니다. 아래 코드는 다음을 수행합니다.

  • 자식이 없으면 새 노드가 추가됩니다.
  • 참조 노드가 없으면 새 노드가 추가됩니다.
  • 참조 노드 노드 다음에 새 노드가 추가되면
  • 그 이후에 참조 노드에 자식이 있으면 새 노드가 해당 형제 앞에 삽입됩니다.
  • 새 노드를 반환

노드 확장

Node.prototype.insertAfter = function(node, referenceNode) ( if (node) this.insertBefore(node, referenceNode && referenceNode.nextSibling); 반환 노드; );

하나의 일반적인 예

Node.parentNode.insertAfter(newNode, 노드);

실행 중인 코드 보기

// 먼저 확장 Node.prototype.insertAfter = function(node, referenceNode) ( if (node) this.insertBefore(node, referenceNode && referenceNode.nextSibling); return node; ); var referenceNode, newNode; newNode = document.createElement("li") newNode.innerText = "첫 번째 새 항목"; newNode.style.color = "#FF0000"; document.getElementById("자식 없음").insertAfter(newNode); newNode = document.createElement("리"); newNode.innerText = "두 번째 새 항목"; newNode.style.color = "#FF0000"; document.getElementById("참조 노드 없음").insertAfter(newNode); referenceNode = document.getElementById("형제 이후"); newNode = document.createElement("리"); newNode.innerText = "세 번째 새 항목"; newNode.style.color = "#FF0000"; referenceNode.parentNode.insertAfter(newNode, referenceNode); referenceNode = document.getElementById("형제 이후"); newNode = document.createElement("리"); newNode.innerText = "네 번째 새 항목"; newNode.style.color = "#FF0000"; referenceNode.parentNode.insertAfter(newNode, referenceNode);

아이가 없다
참조 노드 없음
  • 첫 번째 항목
이후 형제 없음
  • 첫 번째 항목
형제자매
  • 첫 번째 항목
  • 세 번째 항목

insertBefore() 메서드는 parentNode.insertBefore() 처럼 사용됩니다. 따라서 이것을 에뮬레이트하고 parentNode.insertAfter() 메서드를 만들기 위해 다음 코드를 작성할 수 있습니다.

Node.prototype.insertAfter = function(newNode, referenceNode) ( return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); // karim79"s 솔루션 기반); // 필요한 핸들 가져오기 var refElem = document.getElementById(" pTwo"); var parent = refElem.parentNode; // 생성

세 번째 단락

var txt = document.createTextNode("3단락"); var 단락 = document.createElement("p"); 단락.appendChild(txt); // 이제 insertBefore()와 같은 방식으로 호출할 수 있습니다. parent.insertAfter(paragraph, refElem);

단락 1

두 번째 단락

이 기사에서 설명한 것처럼 DOM 확장은 귀하에게 적합한 솔루션이 아닐 수 있습니다.

그러나 이 글은 2010년에 작성되었으며 지금은 상황이 다를 수 있습니다. 그러니 결정하세요.

모든 시나리오를 처리할 수 있습니다.

함수 insertAfter(newNode, referenceNode) ( if(referenceNode && referenceNode.nextSibling && referenceNode.nextSibling.nodeName == "#text") referenceNode = referenceNode.nextSibling; if(!referenceNode) document.body.appendChild(newNode); else if (!referenceNode.nextSibling) document.body.appendChild(newNode); else referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); )

이 코드는 작은 CSS 파일을 인라인하기 위해 마지막 기존 자식 인라인 바로 뒤에 링크 요소를 삽입하도록 작동합니다.

Var raf, cb=function()( //새 노드 생성 var link=document.createElement("link"); link.rel="stylesheet";link.type="text/css";link.href="css/ style.css"; //마지막 노드 뒤에 삽입 var nodes=document.getElementsByTagName("link"); //기존 노드 var lastnode=document.getElementsByTagName("link"); lastnode.parentNode.insertBefore(link, lastnode.nextSibling ); ); //삽입 전 확인 try ( raf=requestAnimationFrame|| mozRequestAnimationFrame|| webkitRequestAnimationFrame|| msRequestAnimationFrame; ) catch(err)( raf=false; ) if (raf)raf(cb); 그렇지 않으면 window.addEventListener("로드",cb);

이 질문에 이미 답변이 너무 많다는 것을 알고 있지만 그 중 어느 것도 내 정확한 요구 사항을 충족하지 못했습니다.

parentNode.insertBefore와 정반대의 동작을 하는 함수가 필요합니다.- 즉, null referenceNode(응답에서 허용되지 않음)를 허용해야 하며 insertBefore가 삽입할 위치 insertBefore에 삽입해야 합니다. 일찍, 그렇지 않으면 이 기능을 사용하여 원래 위치에 붙여넣을 방법이 전혀 없기 때문입니다. 같은 이유로 insertBefore는 끝에 삽입합니다.

null referenceNode가 부모에게 insertBefore를 요구하기 때문에 부모를 알아야 합니다. insertBefore는 parentNode 메서드이므로 이러한 방식으로 부모의 parentNode에 액세스할 수 있습니다. 함수가 존재하지 않으므로 전달해야 합니다. 부모 요소매개변수로.

결과 함수는 다음과 같습니다.

함수 insertAfter(parentNode, newNode, referenceNode) ( parentNode.insertBefore(newNode, referenceNode ? referenceNode.nextSibling: parentNode.firstChild); )

If (! Node.prototype.insertAfter) ( Node.prototype.insertAfter = function(newNode, referenceNode) ( this.insertBefore(newNode, referenceNode ? referenceNode.nextSibling: this.firstChild); ); )

node1.after(node2) 생성 ,

여기서 node1과 node2는 DOM 노드입니다.

안녕하세요! JavaScript를 사용하면 페이지에서 요소를 찾을 수 있을 뿐만 아니라(이 작업을 수행하는 방법 읽기) 요소를 동적으로 만들고 DOM에 추가할 수도 있습니다. 이 작업을 수행하는 방법은 이 단원에서 설명합니다.

만들기 위해 새로운 요소웹 페이지에서 문서 개체에는 다음과 같은 메서드가 있습니다.

  • createElement(요소 이름): 새 요소를 만들고 모든 html 페이지 태그를 매개변수로 전달해야 하며 html 요소를 반환합니다.
  • createTextNode(텍스트): 텍스트 노드를 생성하고 반환합니다.

요소 추가

작은 예를 고려하십시오.

바렐 = document.createElement("div"); var elText = document.createTextNode("안녕하세요");

예제에서 볼 수 있듯이 elem 변수는 새 div 요소에 대한 참조를 저장합니다. 그러나 이해하듯이 요소를 만드는 것만으로는 충분하지 않습니다. 요소는 여전히 웹 페이지에 추가되어야 하기 때문입니다. 결국 이런 식으로 요소를 만들면 일종의 가상 공간이나 메모리에 있는 것처럼 보이지만 웹 페이지에 표시하기 위해서는 특별한 방법이 있습니다.

다음 방법은 웹 페이지에 요소를 추가하는 데 사용됩니다.

  • appendChild(newNode): 이 메서드가 호출된 요소의 끝에 새 요소를 추가합니다.
  • insertBefore(newNode, referenceNode): 두 번째 매개변수로 지정된 노드 앞에 새 노드를 추가합니다.

appendChild 메소드를 사용하여 웹 페이지에 요소를 첨부하는 예를 살펴보겠습니다.

기사 제목

첫 번째 단락

두 번째 단락

예제에서는 일반 h3 표제 요소와 텍스트 노드가 생성되었습니다. 그런 다음 텍스트 노드가 헤더 요소에 추가됩니다. 그런 다음 제목이 웹 페이지의 요소 중 하나에 추가되어 페이지에서 볼 수 있습니다.

그러나 요소 내부에 텍스트를 생성하기 위해 추가 텍스트 노드가 필요하지 않습니다. 요소에 텍스트를 직접 할당할 수 있는 textContent 속성이 있기 때문입니다.

변수 엘 = document.createElement("h3"); el.textContent = "안녕하세요 제목입니다";

이 경우 텍스트를 직접 설정할 때 암시적으로 텍스트가 생성됩니다.

그리고 이 요소를 div의 자식 노드 컬렉션 맨 위에 추가하는 방법도 살펴보겠습니다.

VarartDiv = document.querySelector("div.article"); // 요소 생성 var el = document.createElement("h2"); // 텍스트 생성 var eltxt = document.createTextNode("Hello World"); // 요소에 자식으로 텍스트를 추가합니다. el.appendChild(eltxt); // 앞에 추가할 첫 번째 요소를 가져옵니다. var firstEl = artDiv.firstChild.nextSibling; // 첫 번째 노드 앞에 div에 요소 추가 artDiv.insertBefore(el, firstEl);

갑자기 두 번째, 세 번째 또는 다른 위치에 새 노드를 추가해야 하는 경우 다음 속성을 사용하여 실제로 삽입해야 하는 이전 노드를 찾아야 합니다. firstChild/lastChild 또는 nextSibling/previousSibling을 사용합니다.

요소 복사

요소가 구성이 매우 복잡하고 복사하기가 더 쉬운 상황이 있습니다. 이를 위해 별도의 cloneNode() 메서드가 사용됩니다.

VarartDiv = document.querySelector("div.article"); // articleDiv 요소를 복제합니다. var newArtDiv = artDiv.cloneNode(true); // body 요소의 끝에 추가 document.body.appendChild(newArtDiv);

cloneNode() 메서드는 매개변수로 전달되어야 합니다. 부울: true를 전달하면 요소가 모든 자식 노드와 함께 복사됩니다. false를 전달하면 자식 노드 없이 복사됩니다. 에 이 예콘텐츠와 함께 요소를 복사하여 웹 페이지 끝에 추가합니다.

요소 제거

요소를 제거하려면 removeChild() 메소드를 호출하십시오. 이 방법은 자식 노드 중 하나를 제거합니다:

VarartDiv = document.querySelector("div.article"); // 제거할 노드 찾기 - 첫 번째 단락 var removNode = document.querySelectorAll("div.article p"); // 노드 제거 artDiv.removeChild(removNode);

이 예제는 div 블록에서 첫 번째 단락을 제거합니다.

요소 교체

한 요소를 다른 요소로 바꾸려면 replaceChild(newNode, oldNode) 메서드를 사용합니다. 이 메서드는 새 요소를 첫 번째 매개변수로 사용하며 두 번째 매개변수로 전달된 이전 요소를 대체합니다.

VarartDiv = document.querySelector("div.article"); // 교체할 노드 찾기 - 첫 번째 단락 var old = document.querySelectorAll("div.article p"); // 요소 생성 var new = document.createElement("h3"); // 텍스트 생성 var elemtxt = document.createTextNode("Hello world"); // 요소에 자식으로 텍스트를 추가합니다. new.appendChild(elemtxt); // 바꾸다 오래된 매듭 new artDiv.replaceChild(new, old);

이 예에서는 첫 번째 단락을 새로 생성된 h2 제목으로 바꿉니다.

결과.

다음 메서드는 요소를 만드는 데 사용됩니다.

document.createElement(태그)- 새로운 요소를 생성합니다.

document.createTextNode(텍스트)- 텍스트 노드를 생성

노드 삽입 및 제거 방법

  • parent.appendChild(엘)- 기존 요소의 끝에 요소를 추가합니다.
  • parent.insertBefore(el, nextSibling)- 기존 요소 앞에 요소를 삽입합니다.
  • parent.removeChild(엘)- 요소를 제거
  • parent.replaceChild(newElem, el)- 한 요소를 다른 요소로 대체
  • parent.cloneNode(부울)— 요소를 복사합니다. 매개변수 bool=true이면 요소가 모든 하위 요소와 함께 복사되고, false이면 하위 요소 없이 복사됩니다.

작업

요소를 삽입하는 기능

함수 자체에 요소를 하나씩 삽입하는 insertAfter(newEl, oldEl) 함수를 작성하세요. 요소 자체는 매개변수로 전달됩니다.