2009-03-04 2 views
0

기본 시나리오 : 동적으로 생성 된 HTML 페이지에 일련의 요소가 있습니다. (현재, 그들은 모두 divs입니다.) 그들은 필요하지 않습니다.javascript에서 특정 DOM 요소 그룹 목록을 가져 오는 가장 좋은 방법은 무엇입니까?

내가 원하는 것은 그 모든 것의 루프를 돌리는 자바 스크립트 함수입니다 divs (또는 무엇이든) 특정 값의 존재를 찾고 있습니다. .

이 작업을 수행 할 수있는 최고의, 가장 크로스 브라우저의 방법은 무엇입니까? 모든 브라우저에서 getElementsByName()이 divs에서 작동합니까? 나는 그들에게 같은 ID를 모두주고 배열을 getElementById에서 어떻게 든 다시 가져올 수 있습니까?

내가 spans 또는 inputs에 그 divs를 변경하는 경우, 그 일을 쉽게 하는가?

감사합니다.

(편집 :이 프로젝트에 대한 모든 외부 js 라이브러리를 사용하지 않고 솔루션이 있었다면 최선을 것입니다. jQuery 한 줄에이 작업을 수행하는 함수가 있다고 가정하지만 순간 나는

+0

어디이 된 div의 가치인가? innerHTML? 속성? –

+0

그건 아직 솔직하게 정의되고 있습니다. 가장 쉬운 것은 뭐니? –

답변

3

getElementsByTagName은 DOM 코어에 정의되어 있습니다). 클라이언트와 벌레의 깡통을 열지 않도록, 그래서 작품을 구현하는 브라우저입니다. 그것은 현재 사용중인 모든 브라우저에 관한 것입니다.

는 구체적인 여기를 통해 수컷 거위를 가지고 : -하지 배열 http://www.quirksmode.org/dom/w3c_core.html

하나 잡았다을의 도자기로, getElementsByTagNameNodeList을 반환한다는 것입니다. 그것은 똑같이 작동하지만 아주 늦게 평가됩니다. 따라서 노드를 DOM에 추가/제거 할 때 NodeList을 통과하면 이상한 결과가 발생합니다. 이 경우 두 개의 루프를 작성하십시오. 먼저 NodeList을 반복하고 모든 항목을 배열에 저장합니다. 그런 다음 배열을 반복합니다.

2

이 요소가 무엇인지는 중요하지만,이 페이지에있는 경우 어떤 문제가하는 일은하지 않습니다. 그것들이 단일 부모 요소의 자식 요소라면 문제는 간단합니다. 부모 요소에 ID를 지정하고 getElementById()을 사용하여 해당 요소를 가져 와서 반복 할 수 있습니다. 아이디의 하나 개 이상의 인스턴스 문서에서 발견 될 때

getElementById() 동작이 정의되지 않는다. 대부분은 찾을 수있는 첫 번째 요소를 반환합니다. 그러나 배열을 가져 오는 데는 의심의 여지가 없습니다.

getElementsByTagName()은 페이지의 다른 곳에 표시되지 않을 확실하지 않은 애매한 태그를 사용할 수있는 경우에만 작동합니다. 관심있는 요소가 확인할 수있는 속성 (예 : @class 또는 @title)을 갖도록 지정하여이 기능을 향상시킬 수 있습니다. 그런 다음 getElementsByTagName() 결과를 확인하고 속성이있는 요소 만 확인하면됩니다.

+0

여러 브라우저가 HTML을 다른 DOM 구조로 나타내므로 .childNode를주의하십시오. 특히 공백은 TextNode가되거나되지 않을 수 있습니다. – troelskn

1

당신은 대부분의 스위트 룸을 사용자의 요구에 getElementBy을 확인하려면 this 사이트를 사용할 수 있습니다.
일부 라이브러리를 사용하고 있습니다. troelskn 등 모든 지원 브라우저의 표준 자바 스크립트에 해당하는 내용이 있습니다.

관련 문제