2010-01-19 4 views
3

document.getElementsByTagName("*")은 IE/Firefox/Opera에서 작동하지만 Chrome 및 Safari에서는 작동하지 않습니다.document.getElementsByTagName ("*") 또는 document.all

document.all는 IE/Chrom/Safari에서 작동하지만 Firefox에서는 작동하지 않습니다.

어떻게 처리 할 수 ​​있습니까?

+3

실제로 무엇을하려고합니까? 이 중 하나를 사용하지 않고 실제 문제를 해결할 수있는 더 나은 방법이있을 것입니다. – Nickolay

답변

0

나는 오늘날 크로스바 형식으로이 일을 할 수있는 기술에 대해 알지 못한다는 것을 인정하지만, 과거에는 항상 그렇게해야했습니다. 어떤 브라우저를 사용하고 있는지 확인하십시오.

그러나 더 간단한 해결책은 그 중 하나를 실행하는 것입니다. 아무 것도/null/오류가 발생하면 다른 것을 사용하십시오.

어쨌든 직접 처리하고 싶지 않다면이를 처리 할 라이브러리 (예 : jQuery)를 사용해야합니다. 이 같은

5

보십시오 : 모든 최신 브라우저에서

allElements = document.all ? document.all : document.getElementsByTagName("*"); 
+0

감사합니다. 그러나 Chrom과 Safari에서는 여전히 작동하지 않습니다. – Jason

+0

방금 ​​확인한 바 크롬에서 작동하며 사파리에서도 작동합니다. – kjagiello

+0

이 중 하나를 사용하지 않고 해결했습니다 – Jason

3

document.getElementsByTagName() 완벽하게 작동

if (document.all !== undefined) 
{ 
    allElements = document.all; 
} 
else 
{ 
    allElements = document.getElementsByTagName("*"); 
} 

이하 버전 (IE5보다 새로운 모든).

Chrome 또는 Safari에서 작동하지 않는 경우 다른 곳에서 발생하는 오류 증상 일 가능성이 큽니다.

0

많은 클라이언트 측 구문 분석을 수행해야 함을 의미하기 때문에 document.all을 수행하는 것이 권장되지 않지만 필요한 것은 많이 있습니다. document.all에 대한 래퍼 메서드에 대한 내 생각의 약간의 확장을 게시 할 수 있습니다.

document.all = document.all || function(){ 
    return document.getElementsByTagName("*"); 
}; 

물론이 경우 getElementsByTagName 함수가 있다고 가정합니다.

+0

'document.all'은 Chrome에서 false로 평가됩니다. 당신은'document.all! == undefined'와 같은 것을하거나 짧은 버전을 위해서''모든 문서에서''그것의 존재를 검사 할 필요가 있습니다. –

-1

document.all은 표준을 준수하지 않으므로 피해야합니다. 대신 특정 노드에 document.getElementById()을 사용하거나 $("*")을 사용할 수 있습니다. jQuery를 사용하여 모든 요소를 ​​선택하십시오.

그래도 document.all을 사용하려면 <!DOCTYPE> 태그가 페이지에서 제거되고 xmlns 속성도 <html> 태그에서 제거되어야합니다. 이 같은

변경 아무것도 :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

로는 :

<html> 

나는 파이어 폭스 19.0.2에 그것을 테스트 한 document.all 나를 위해 잘 작동합니다.

이유 : 당신이 당신의 웹 페이지는 당신이 당신의 스크립트에서 document.all를 사용하지 알려줍니다 기준에 불만 인 브라우저를 이야기하는 <!DOCTYPE> 태그를 사용하므로 브라우저는 그것을 허용하지 않는 경우.

그러나 사용하고자하는 것처럼 분명히 표준을 따르지 않으므로 <!DOCTYPE> 태그를 추가하지 않아도됩니다. document.all은 작동하지 않습니다.

+2

진지한가? 'document.getElementById()'를 사용하여 모든 요소를 ​​선택하는 방법과 doctype을 제거하는 것이 좋은 생각이라고 생각하는 이유는 무엇입니까? – BoltClock

0

@Khurram Hassan의 답변에 대한 충분한 언급이 없으면, 원래 질문에 대한 대답과 함께 여기에 적어 두겠습니다.

먼저, 원래 질문. 내 솔루션은 (그리고 내 자신의 코드에,이 사이트에 올려 놓은 문제에 대한 답변을 기다리고 있습니다.) document.getElementsByTagName ("*"), 실제로 Chrome의 모든 요소를 ​​가져옵니다. 필자는 프로필이로드되고 가장 많이 방문한 사이트 8 개를 나열한 Google 크롬 google.com에서 테스트를 실시했으며 태그 이름이 356 개인 개별 요소로 나왔습니다. 공평하게, 여기에는 html, head, body 및 다른 것들이 유용하지는 않지만, 여전히 유용합니다. 현재 Opera에 액세스 할 수는 없지만 크롬에서 여전히 자바 스크립트를 사용하고 있기 때문에 코드에서 허용하지 않는 이유는 알 수 없습니다.

두 번째로 @Khurram hassan의 경우이 경우 document.getElementById()을 사용할 수 없습니다. 방금 Chrome에서 테스트했는데 null 값이 나타났습니다. 이론 상으로는 getElementBy*과 반대로 getElementsBy*의 일반 형식을 가진 모든 것이이 경우에 사용될 수 있습니다. 따라서 이전 답변에 덧붙이려는 시도에 따라 ClassName, NameTagNameNS을 시도해보십시오. 이전과 같은 페이지에서 나는 그 세 가지를 테스트했으며 TagNameNS 만 작동했지만 나머지는 오류가 아닌 빈 목록을 반환했습니다.

코드에 <!DOCTYPE html>이 필요 없다는 것이 사실이라면, 우리는 그것을 볼 수 있도록 답변을 편집하여 작업 코드를 게시 할 수 있습니다. <!DOCTYPE html>은 내가 아는 한, 일반적으로 HTML 페이지를 시작하는 방법으로 일반적으로 받아 들여지는 것으로 간주됩니다. 필요하지 않다면 디버깅 또는 비공개 웹 페이지에서 유용 할 수있는 새로운 정보가 될 것입니다.

관련 문제