ID를 가진 DOM 트리 요소는 글로벌 속성이 됩니까?
HTMLElementwrapper Internet Explorer와 Chrome에서 우연히 다음을 발견했습니다.
의 ★★★★★에 대해서HTMLElement an id서는, DOM 를 할 수 .<div>를 이름 window<div>
<div id="example">some text</div>
Internet Explorer 8 및 Chrome에서는 다음 작업을 수행할 수 있습니다.
alert(example.innerHTML); // Alerts "some text".
또는
alert(window["example"].innerHTML); // Alerts "some text".
그러면 DOM 트리의 모든 요소가 글로벌 객체의 속성으로 변환된다는 의미일까요?그리고 이것은 또한 이 시스템을 대체하기 위해 사용할 수 있다는 것을 의미합니까?getElementById이라브 저? ???
' 요소는 '이름붙인 요소'가 '이름붙인 요소'가 '이름붙인 요소'가 '이름붙인 요소'가 '이름붙인 요소'가 '이름붙인 요소'가 '이름붙인 요소'의 으로 추가되는 document이 방법은 요소 이 실제 할 수 있기 좋지 않습니다.document.
는 IE의 시켰습니다.window이것은 입니다. 이제 요소 은 어느 한 멤버의 이름을 붙이는 .document ★★★window오브젝트(또는 프로젝트의 다른 라이브러리 코드)에서 사용할 수 있습니다.
이는 또한 이러한 요소가 글로벌 변수와 유사한 변수로 표시된다는 것을 의미합니다. 이 글로벌은 var ★★★★★★★★★★★★★★★★★」function은 이들을처럼 드리우므로 을 붙이는 것에 , 을 가진 때 이를 을 잊은 입니다.varIE가 요소 자체에 값을 할당하려고 하면 오류가 발생합니다.
일반적으로 생략하는 것은 나쁜 관행으로 여겨진다.var또한 이름 있는 요소가 에 표시되어야 합니다.window니면면지지지지지document.getElementById이는 보다 폭넓게 지원되며 애매모호하지 않습니다.타이핑이 마음에 들지 않는 경우는, 간단한 래퍼 기능을 짧은 이름으로 쓸 수 있습니다. 캐시를 사용하는 는 일반적으로 id-to-element를 입니다.브라우저는 일반적으로 이 ID-to-Element 룩업 캐시를 최적화하기 때문입니다.getElementById가 변경되었을 때 는 문제뿐입니다.요소가 변경되었을 때 발생하는 문제는 문제뿐입니다.id또는 문서에서 추가/삭제됩니다.
IE를 한 후 은, 되지 않은, Opera IE에 이름 를 WebKit에 하는 것입니다.이때 이름 있는 요소를 배치하는 기존의 표준화되지 않은 관행은 모두document및 에서만 사용하던 IE에 .window HTML5에 의해 표준화되고 있습니다.HTML5의 접근방식은 브라우저 작성자가 우리에게 가한 모든 끔찍한 관행을 문서화하고 표준화하는 것입니다.이것들은 영원히 웹의 일부가 됩니다.따라서 Firefox 4도 이를 지원합니다.
있는 요소란 입니까?름있있란란란란란란란란란란란?「」가 id 가 있는 것, " " " " " " " "name'됨: , 및 , ''의 되지 않은 : '형식', '형식', '형식', '형식', '앵커' 및 '형식', '형식' 등의 목적으로 사용됨name 필드의 와 같은 Atribute,( 「」, 「」)<param> 을 지정합니다.<meta> '식별'name는 s의 는 안 것입니다.id.
이전 답변에서 설명한 바와 같이 이 동작을 window 객체에 대한 이름 있는 액세스라고 합니다.의 값name의 Atribute 및 " " 의 값id 속성으로 할 수 .window 있는 라고 합니다.이러한 요소를 명명된 요소라고 합니다.★★window을 사용하다지정된 각 요소는 글로벌 변수로 액세스 할 수 있습니다.
이것은 원래 Internet Explorer에 의해 추가되었으며, 결국 이 동작에 의존하는 사이트와의 호환성을 위해 다른 모든 브라우저에 의해 구현되었습니다.흥미롭게도, Gecko(Firefox의 렌더링 엔진)는 이것을 쿼크 모드로만 구현하기로 선택한 반면, 다른 렌더링 엔진은 표준 모드로 그대로 두었다.
단, Firefox 14 이후 Firefox는 이제 이름 있는 접근을window오브젝트도 표준 모드로 설정합니다.왜 이걸 바꿨을까요?표준 모드에서 이 기능을 사용하는 사이트는 여전히 많이 있는 것으로 나타났습니다.마이크로소프트는 심지어 마케팅 데모를 발표했는데, 이 데모는 파이어폭스에서 작동하지 않았다.
Webkit은 최근 그 반대라고 생각하고 있습니다.이것에 의해, 이름이 붙여진 액세스와 관련지어지고 있습니다.window별난 짓을 하다그들은 Gecko와 같은 이유로 그것을 반대하기로 결정했다.
이 동작은 기술적으로 모든 주요 브라우저의 최신 버전에서 표준 모드로 사용해도 안전한 것 같습니다.그러나 이름 있는 접근은 다소 편리해 보일 수 있지만 사용하지 말아야 합니다.
왜일까? 이 기사에서 글로벌 변수가 나쁜 이유에 대한 많은 추론을 요약할 수 있다.간단히 말해, 추가 글로벌 변수가 많으면 더 많은 버그가 발생합니다.예를 들어 잘못 입력했다고 가정해 봅시다.var 우연히 '타자'를 됩니다.idDOM ★★★★★★★★★★★★★★★★★★★!
또한 표준화 되었음에도 불구하고 브라우저의 명명된 액세스 구현에는 여전히 많은 불일치가 있습니다.
- 가 IE의 했습니다.
name폼 요소(입력, 선택 등)에 액세스 가능한 속성. - Gecko를 만들지
<a>에서 액세스 한 태그name여하하다 - Gecko는 동일한 이름의 여러 개의 명명된 요소를 잘못 처리합니다(참조 배열 대신 단일 노드에 참조를 반환합니다).
그리고 엣지 케이스에 명명된 액세스 권한을 사용해 보면 더 많을 것입니다.
했듯이 '하다'를 사용합니다.document.getElementById에 대한 를 그 DOM 노드에 id.name use " " "document.querySelectorAll.
사이트에서 명명된 액세스를 사용하여 이 문제를 전파하지 마십시오.너무나 많은 웹 개발자들이 이 마법 같은 행동을 추적하기 위해 시간을 허비했다.표준 모드에서 명명된 액세스를 해제하려면 렌더링 엔진을 사용해야 합니다.단기적으로는 나쁜 짓을 하는 사이트도 있지만 장기적으로는 웹을 발전시키는 데 도움이 될 것입니다.
관심 있으시다면 제 블로그 https://www.tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/에서 더 자세히 말씀드리겠습니다.
넌 계속해야 해getElementById()예를 들어 다음과 같습니다.
document.getElementById('example').innerHTML
는 IE와 .name ... ID글로벌 네임스페이스의 속성을 지정할 수 있습니다.따라서 무엇을 얻으려고 하는지 명확하게 하는 것이 가장 좋습니다.
다음과 같이 질문할 수 있습니다: "제공된 ID를 가진 HTML 태그는 글로벌하게 접근 가능한 DOM 요소가 됩니까?"
대답은 그렇습니다 이다!
W3C가 ID를 도입한 것은 그 때문입니다.해석된 스크립트 환경에서 HTML 태그의 ID가 대응하는 DOM Element 핸들이 됩니다.
그러나 Netscape Mozilla는 W3C에 대한 준거(침입)를 거부하여 W3C의 Unique ID 도입에 따른 스크립트 기능과 코딩 편의성을 파괴하기 위해 사용되지 않는 Name 속성을 고집스럽게 사용했습니다.
Netscape Navigator 4.7의 실패 이후, 그들의 개발자들은 모두 W3C에 침투했고, 반면 그들의 동료들은 잘못된 관행과 잘못된 사례로 웹을 대체하고 있었다.특정 DOM 요소에 액세스하기 위해 ID 핸들을 사용한 스크립트가 고장나도록 ID 속성과 동등하게 이미 폐지된 이름 속성 [!what was not unique]를 강제로 사용 및 재사용합니다.
, 예시를 써, , 「할 수 라고 하는 예도 했습니다.document.all.ElementID.propertyElementID.property(현재 [1996-97], 폐지된) Name과 동일한 토큰 값을 제공하는 표준 ID 속성을 사용하여 HTML 도메인에서 단순히 중단되지 않은 경우에 대비하여 적어도 비효율적으로 만들고 브라우저에 더 많은 오버헤드를 줄 수 있습니다.
그들은 당시 무식한 코드 작성 아마추어 무리에게 ID 속성이 고대 Name 속성보다 더 짧고 바이트를 절약하고 코드 작성자에게 더 편리하다는 점을 제외하고는 이름과 ID가 실질적으로 동일하다고 쉽게 설득할 수 있었다.그건 물론 거짓말이었다.또는 HTML의 게시된 기사 대신 스크립팅 엔진에서 태그에 액세스하려면 태그에 이름과 ID를 모두 입력해야 한다는 설득력 있는 기사도 있습니다.
모자이크 킬러들은 너무 화가 나서 "우리가 망하면 인터넷도 망해야 한다"고 생각했다.
반면 떠오르는 마이크로소프트는 너무 순진해서 Netscape 훈련생에 의해 코드화된 오래된 페이지의 스크립팅 기능을 손상시키지 않도록 권장되지 않고 삭제용으로 마크된 Name 속성을 유지하고 고유한 ID인 것처럼 취급해야 한다고 생각했다.그들은 완전히 틀렸다...
그리고 ID 충돌 요소의 배열 모음의 반환도 이 의도적인 인위적인 문제에 대한 해결책이 아니었다.사실 그것은 모든 목적을 달성하지 못했다.
하게 변한 한 이유이며, 에게 W3C와 .document.getElementById ))그리 and and and and of of of of ( ( ( ( ( (...)
네, 그렇습니다.
55, 50, 11, 14 및 Safari 10Chrome 55, Firefox 50, IE 11, IE Edge 14 'Safari 10'에서 테스트
를 들면, with with음 、 with with 、 with with 、 with with 、 with with with 。
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="im_not_particularly_happy_with_that">
Hello World!
</div>
<script>
im_not_particularly_happy_with_that.innerText = 'Hello Internet!';
</script>
<!-- Looking at you W3 HTML5 spec group ಠ_ಠ -->
</body>
</html>
http://jsbin.com/mahobinopa/edit?html,output
언급URL : https://stackoverflow.com/questions/3434278/do-dom-tree-elements-with-ids-become-global-properties
'source' 카테고리의 다른 글
| REGEXP_SUBstr이 모든 일치 항목을 반환합니다(mariaDB). (0) | 2023.02.05 |
|---|---|
| Java 해시맵:가치에서 키를 얻는 방법 (0) | 2023.02.05 |
| "_" 단일 언더스코어 쿼리 파라미터를 추가하는 사용자 (0) | 2023.02.05 |
| MySQL 서버용으로 my.cnf 파일과 mariadb-server.cnf 파일을 모두 구성하는 이유는 무엇입니까?또, 이러한 파일은 어떻게 접속되어 있습니까? (0) | 2023.02.05 |
| Swisscom 클라우드의 MariaDB에 데이터베이스 추가 (0) | 2023.02.05 |