집 >
기사 > 웹 프론트엔드 > Javascript에서 BOM과 DOM의 차이점과 연결 비교
Javascript에서 BOM과 DOM의 차이점과 연결 비교
巴扎黑원래의
2017-08-09 11:18:141330검색
1.Javascript 구성
JavaScript 구현에는 다음 3 부분이 포함됩니다.
1) 핵심(ECMAScript): 설명 JS 의 구문 및 기본 개체.
2) 문서 개체 모델(DOM): 웹 콘텐츠 처리를 위한 방법 및 인터페이스
3) 브라우저 개체 모델(BOM): 브라우저와 상호 작용 메서드 및
ECMAScript 인터페이스 스크립트 .
② "ECMAScript는 다양한 유형의 호스트 환경에 핵심 스크립팅 기능을 제공할 수 있습니다..." 즉, ECMAScript는 JS 호스트와 같은 특정 호스트 환경에 바인딩되지 않습니다. 환경은 브라우저이고
AS
의 호스트 환경은 Flash입니다. 3ECMAScript에서는 구문, 유형, 명령문, 키워드, 예약어, 연산자, 객체를 설명합니다. 우리 모두는 javascript
가 ECMAScript, DOM 및 BOM의 세 부분으로 구성되어 있다는 것을 알고 있습니다. 구체적인 표현은 호스트(브라우저)에 따라 다르며, ie 및 기타 브라우저는 매우 다릅니다. 스타일.
1. DOM
은 W3C
의 표준입니다. [모든 브라우저가 공개적으로 준수하는 표준입니다. ]
2. 각 브라우저 제조업체가
에 따라 채택하는 표준입니다. DOM 브라우저에서의 구현 ; [ 다른 브라우저 정의로 나타남 , 구현 방법이 다릅니다 ] 3 창 은 BOM 개체입니다. js 개체; DOM(문서 개체 모델)은 HTML 및 XML의 API(응용 프로그래밍 인터페이스)입니다. BOM은 주로 브라우저 창과 프레임을 다루지만 일반적으로 브라우저별 JavaScript 확장은 BOM 의 일부로 간주됩니다. 이러한 확장에는 다음이 포함됩니다. 새 브라우저 창 팝업 브라우저 창 이동, 닫기 및 크기 조정 브라우저 세부 정보를 제공하는 웹
DOM 全称是 Document Object Model,也就是文档对象模型。是针对XML的基于树的API。描述了处理网页内容的方法和接口,是HTML和XML的API,DOM把整个页面规划成由节点层级构成的文档。针对XHTML和HTML的DOM。这个DOM定义了一个HTMLDocument和HTMLElement做为这种实现的基础,就是说为了能以编程的方法操作这个 HTML 的内容(比如添加某些元素、修改元素的内容、删除某些元素),我们把这个 HTML 看做一个对象树(DOM树),它本身和里面的所有东西比如
이러한 태그는 객체로 간주되며 각 객체는 DOM에 있는 모든 객체의 상위 클래스로 이해될 수 있습니다.
DOM은 어떤 용도로 사용되나요? 예를 들어 JS를 통해 이 웹페이지의 제목을 변경하려면 다음과 같이 하세요.
document.title = 'how to make love';
이 API를 사용하면 웹페이지를 다음과 같이 만들 수 있습니다. 다운로드 브라우저 접속 후 웹페이지의 내용을 변경할 수 있습니다.
document
브라우저가 웹 페이지(일반적으로 HTML)를 다운로드할 때 이 HTML을 문서라고 합니다(물론 DOM 트리의 노드이기도 합니다). 위 그림에서 볼 수 있듯이 문서는 일반적으로 문서입니다. 전체 DOM 트리. 이 문서에는 JS에서 직접 접근할 수 있는 제목(document.title), URL(document.URL)과 같은 속성이 포함되어 있습니다.
브라우저 창에는 여러 문서가 있을 수 있습니다. 예를 들어 iframe을 통해 로드된 페이지는 각각 문서입니다.
JS에서는
document.body;document.getElementById('xxx');
BOM
BOM과 같은 문서를 통해 하위 노드에 액세스할 수 있습니다(사실 모든 노드에서 가능). 브라우저 개체 모델,브라우저 개체 모델.
DOM은 문서를 조작하는 것처럼 보이는 인터페이스라고 했는데, BOM은 이름에서 알 수 있듯이 실제로는 브라우저의 동작을 제어하는 것처럼 보이는 인터페이스입니다.
브라우저는 무엇을 할 수 있나요? 예를 들어, 다른 페이지로 이동하거나 앞으로, 뒤로 이동하는 등의 작업을 수행하려면 프로그램에서 화면 크기와 같은 매개변수를 얻어야 할 수도 있습니다.
그래서 BOM은 이런 것들을 해결해 주는 인터페이스인 것 같습니다. 예를 들어 브라우저가 다른 페이지로 이동하도록 하려면
location.href = "http://www.xxxx.com";
이 위치는 BOM의 개체만 있으면 됩니다.
window
window는 프로그래밍 측면에서 "백업 개체" 외에도 BOM의 개체이기도 합니다. 이 개체는 창 위치를 가져오고 창 크기를 결정하고 대화 상자를 팝업하는 데 사용할 수 있습니다. 상자 등 예를 들어, 현재 창을 닫고 싶습니다.
window.close();
질문을 요약하면:
DOM은 문서 운영을 위한 API이고, document는 문서 운영을 위한 API입니다. 브라우저에 나타나는 API인 window는 그 객체입니다.
은 DOM에서 관리합니다:
E
영역(그렇게 말씀하셨습니다 document. By 웹개발자들이 고생해서 작성했어요A index.html, CSS 및 JS이 포함된 폴더입니다. 서버에 배포하면 브라우저의 주소 표시줄을 통해 URL을 입력한 다음 Load this 을 반환할 수 있습니다. document 로컬에서 찾아보기, 소스 코드 등을 보려면 마우스 오른쪽 버튼을 클릭하세요.
은 BOM:
A
영역(브라우저 탭 페이지, 주소 표시줄)에서 관리됩니다. 바, 북마크바, 창 확대 복원 닫기 버튼, 메뉴바 등)
B
영역 (브라우저 우클릭 메뉴)
C
영역 (document 로딩시 http상태 코드 등을 표시하는 상태 표시줄)
D
영역(스크롤 막대스크롤 막대)
BOM은 브라우저 개체 모델이고 DOM은
문서입니다. 객체 모델 , 전자는 브라우저 자체에서 작동하는 반면 후자는 브라우저의 콘텐츠에서 작동합니다(컨테이너로 볼 수 있음)
BOM 및 DOM 구조적 관계의 도식적 다이어그램
2. 문서 개체 모델(DOM)
DOM노드 트리 모델(HTML DOM트리를 예로 사용)
DOM모델은 전체 문서(XML)를 결합합니다. document 및 HTMLdocument)은 트리 구조로 표시되고,
DOM에서는 HTMLdocument의 계층 구조가 트리 구조로 표현됩니다. 그리고 document 개체를 사용하여 문서를 나타내고 트리의 각 하위 노드는 HTML 문서의 다양한 콘텐츠를 나타냅니다.
브라우저에 로드된 모든 HTML 문서는 Document 개체 가 됩니다. Document는 DOM,을 탐색할 수 있는 입구입니다. 전역 변수 문서 Document 개체에 액세스할 수 있습니다.
2.1 알아보기 DOM
먼저 아래 코드를 살펴보세요.
HTML 코드를 DOM 노드 계층 다이어그램으로 분해 :
DOM은 트리를 생성하여 문서를 표현하고 웹 콘텐츠 처리를 위한 방법과 인터페이스를 설명하므로 개발자는 DOM API를 사용하여 문서의 콘텐츠와 구조를 전례 없이 쉽게 삭제, 추가 및 교체할 수 있습니다.
1) 노드 유형
DOM은 문서의 각 구성 요소가 노드라고 규정합니다(Node), HTML문서는 노드의 집합이라고 할 수 있습니다. DOMnodes have :
1)nodeName: 요소 노드, 속성 노드 및 텍스트 노드는 각각 요소의 이름을 반환합니다. 속성 이름과 #text 문자열입니다.
2)nodeType: 요소 노드, 속성 노드, 텍스트 노드의 nodeType 값은 1, 2, 3입니다. 각각 . 、
3)nodeValue: 요소 노드, 속성 노드 및 텍스트 노드의 반환 값은 각각 null, 속성 값 및 텍스트 노드 내용입니다.
2.2 DOM일반 작업
Node은 모든 노드의 상위 인터페이스로, 다음과 같이 공용 속성 및 메서드 집합을 정의합니다.
1) 노드 가져오기
① 요소 노드 가져오기: document의 세 가지 방법을 통해
document.getElementById("ID")
document.getElementByName("name")
document.getElementsByTagName("p");
을 가져옵니다. object ② 속성 노드 얻기: 속성 노드는 요소 노드에 붙어있습니다. 요소 노드의 getAttributeNode(attrName) 메소드를 통해 속성 노드를 얻거나, getAttribute(attrName)을 통해 직접 속성 값을 얻을 수 있습니다. ). (반대로, Element 인터페이스의 setAttribute(attrName)은
, attrValue)메서드, 속성이 존재하지 않으면 요소 노드에 직접 추가됨)
3 텍스트 노드 가져오기: 텍스트 노드는 요소 노드의 하위 노드이며, 요소 노드(Element 인터페이스) childnodes()[index] 메서드로 가져옵니다.
childNodes //NodeList, 모든 하위 노드 목록
firstChild //Node, childNodes 목록의 첫 번째 노드를 가리킴
lastChild //Node, childNodes 목록의 마지막 노드를 가리킴
parentNode / /Node, 상위 노드
previousSibling /Node, /는 이전 형제 노드를 가리킵니다. 이 노드가 첫 번째 노드이면 값은 null입니다.
nextSibling //Node, 다음 형제 노드를 가리킵니다. if 이 노드는 마지막 노드이고 값은 null
hasChildNodes()` //Boolean, childNodes에 하나 이상의 노드가 포함된 경우 true 값을 반환합니다
2)노드 변경
① 속성 노드 값 변경: 속성 노드의 nodeValue을 통해 속성 값을 직접 수정할 수도 있고, 요소 노드의 setAttribute() 메소드를 통해 변경할 수도 있습니다.
② 텍스트 노드의 값 변경: 텍스트 노드의 nodeValue을 통해 직접 수정합니다.
HTML DOM에서 요소의 콘텐츠를 가져오고 변경하는 가장 쉬운 방법은 요소의 innerHTML 속성을 사용하는 것입니다(innerText 속성은 innerHTML을 반환합니다)
확장:
innerText, innerHTML, externalHTML, externalText
innerText: 表示起始标签和结束标签之间的文本
innerHTML: 表示元素的所有元素和文本的HTML代码
如:
Hello world
innerText는 Hello world, innerHTML은 Hello world
outerText: 전자와의 차이점은 전체 대상 노드가 교체되고 문제는 innerText
outerHTML과 동일한 콘텐츠를 반환한다는 것입니다. 전자와의 차이점은 전체 대상 노드가 교체되고 요소 자체를 포함하여 요소의 전체 HTML 코드가 반환됩니다.
OUTHTML, innerText 및 innerHTML을 이해하기 위한 그림:
HTML 스타일 변경(style속성): element.style.color ="red";
3) 노드 삭제
① 요소 노드 삭제: 삭제 요소 노드 A, 를 가져와야 함 A의 상위 노드 B는 17.1.1의 메서드를 통해 또는 parentNode 속성을 통해 직접 얻을 수 있습니다. A(권장). B의 removeChild(A)를 호출하여 A 노드를 삭제합니다.
② 속성 노드 삭제: 해당 속성 노드가 속한 요소 노드의
removeAttribute(attrName) 또는 removeAttributeNode(node)을 통해 삭제할 수 있습니다.
3 텍스트 노드 지우기: 가장 간단하고 일반적인 방법은 텍스트 노드의
nameNode 속성을 빈 문자열로 직접 설정하는 것입니다: textNode.nodeValue ="".
혼란 지점:
이것은 텍스트입니다
< /span> ;
var p = document.getElementById('example');p.nodeValue //null, p
는 요소 노드이므로 nodeValue는 null TP.GetattributeNode입니다. ('ID').NodeValue // 예,
P의
ID 속성 노드를 얻으려면 NodeValue가 해당 속성 값 p.childNodes입니다. [0].nodeValue //이것은 텍스트 조각입니다. p
에는 두 개의 하위 노드가 포함되어 있습니다. 삽입된 텍스트에는 레이블이 없지만 여전히 노드입니다.
해당 유형은 텍스트 노드이고
nodeValue
는 줄 바꿈 및 들여쓰기를 포함하여 여기에 작성된 문자열입니다.
p.innerHTML//이것은 텍스트 < /span>"Here
innerHTML은 p
에 포함된 모든 노드에 포함된 다양한 값을 문자열 형식으로 반환합니다.
4)创建和添加节点
① 创建节点:通过document对象的createElement(eleName)、createTextNode(nodeValue)方法可分别创建元素节点和文本节点。属性节点也有自己的create方法,但是用的少,直接用元素节点的setAttribute()方法即可添加属性。
② 添加节点:两个重要的方法:appendChild()和insertBefore(),具体见Node接口中的方法。
HTML 이벤트: 로드, 언로드, 중단, 오류, 선택 , 변경, 제출, 재설정, 크기 조정, 스크롤, 포커스, 흐림
4) 이벤트 핸들러
JavaScript 코드를 실행하는 프로그램은 이벤트가 발생하면 이벤트에 응답합니다. 특정 이벤트에 대한 응답으로 실행되는 코드를 이벤트 핸들러라고 합니다.
HTML 태그에서 이벤트 핸들러를 사용하는 구문은 다음과 같습니다.
5) 이벤트 핸들러
이벤트는 사용자 또는 브라우저 자체입니다. A 예를 들어 click, mouseup, keydown, mouseover 등은 모두 이벤트 이름입니다. 이벤트에 응답하는 함수를 이벤트 핸들러(이벤트 리스너)라고 합니다. 이벤트 핸들러는 onclick
6)DOM 0
level 이벤트 핸들러DOM 레벨 0 이벤트 핸들러: 이벤트의 핸들러 속성에 함수를 할당합니다
var btn2=document.getElementById('btn2'); btn2 버튼 객체 가져오기
btn2.onclick // btn2에 onclick 속성을 추가하고 속성이 다시 트리거됨 이벤트 핸들러
btn2.onclick=function(){
} //익명 함수 추가
btn2.onclick=null //onclick 속성 삭제
7)
DOM 2
레벨 이벤트 핸들러 DOM 레벨 2 이벤트는 DOM에서 이벤트 핸들러 작업 addEventListener() 및 RemoveEventListener()
addEventListener() 및 RemoveEventListener()
를 지정하고 제거하기 위한 두 가지 메서드를 정의합니다. addEventListener() 및 RemoveEventListener()는 이벤트 핸들러를 할당하고 제거하는 데 사용됩니다. IE와 달리 이러한 메소드에는 이벤트 이름, 할당할 함수, 버블링 단계( false) 또는 캡처 단계( false)에 사용되는 핸들러 함수의 세 가지 매개변수가 필요합니다. true), 기본값은 버블링 단계입니다. false[object].addEventListener("name_of_event",fnhander,bcapture)
BOM 핵심은 window이고, window 객체는 듀얼 역할을 가지고 있으며, js를 통해 액세스합니다. Global(전역) 개체이기도 한 브라우저 창의 인터페이스입니다. 이는 웹 페이지에 정의된 모든 객체, 변수 및 함수가 global 객체로 window을 갖는다는 것을 의미합니다.