document.getElementsByTagName("*")
은 IE/Firefox/Opera에서 작동하지만 Chrome 및 Safari에서는 작동하지 않습니다.document.getElementsByTagName ("*") 또는 document.all
document.all
는 IE/Chrom/Safari에서 작동하지만 Firefox에서는 작동하지 않습니다.
어떻게 처리 할 수 있습니까?
document.getElementsByTagName("*")
은 IE/Firefox/Opera에서 작동하지만 Chrome 및 Safari에서는 작동하지 않습니다.document.getElementsByTagName ("*") 또는 document.all
document.all
는 IE/Chrom/Safari에서 작동하지만 Firefox에서는 작동하지 않습니다.
어떻게 처리 할 수 있습니까?
나는 오늘날 크로스바 형식으로이 일을 할 수있는 기술에 대해 알지 못한다는 것을 인정하지만, 과거에는 항상 그렇게해야했습니다. 어떤 브라우저를 사용하고 있는지 확인하십시오.
그러나 더 간단한 해결책은 그 중 하나를 실행하는 것입니다. 아무 것도/null/오류가 발생하면 다른 것을 사용하십시오.
어쨌든 직접 처리하고 싶지 않다면이를 처리 할 라이브러리 (예 : jQuery)를 사용해야합니다. 이 같은
document.getElementsByTagName()
완벽하게 작동
if (document.all !== undefined)
{
allElements = document.all;
}
else
{
allElements = document.getElementsByTagName("*");
}
이하 버전 (IE5보다 새로운 모든).
Chrome 또는 Safari에서 작동하지 않는 경우 다른 곳에서 발생하는 오류 증상 일 가능성이 큽니다.
많은 클라이언트 측 구문 분석을 수행해야 함을 의미하기 때문에 document.all을 수행하는 것이 권장되지 않지만 필요한 것은 많이 있습니다. document.all에 대한 래퍼 메서드에 대한 내 생각의 약간의 확장을 게시 할 수 있습니다.
document.all = document.all || function(){
return document.getElementsByTagName("*");
};
물론이 경우 getElementsByTagName 함수가 있다고 가정합니다.
'document.all'은 Chrome에서 false로 평가됩니다. 당신은'document.all! == undefined'와 같은 것을하거나 짧은 버전을 위해서''모든 문서에서''그것의 존재를 검사 할 필요가 있습니다. –
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
은 작동하지 않습니다.
진지한가? 'document.getElementById()'를 사용하여 모든 요소를 선택하는 방법과 doctype을 제거하는 것이 좋은 생각이라고 생각하는 이유는 무엇입니까? – BoltClock
@Khurram Hassan의 답변에 대한 충분한 언급이 없으면, 원래 질문에 대한 대답과 함께 여기에 적어 두겠습니다.
먼저, 원래 질문. 내 솔루션은 (그리고 내 자신의 코드에,이 사이트에 올려 놓은 문제에 대한 답변을 기다리고 있습니다.) document.getElementsByTagName ("*"), 실제로 Chrome의 모든 요소를 가져옵니다. 필자는 프로필이로드되고 가장 많이 방문한 사이트 8 개를 나열한 Google 크롬 google.com에서 테스트를 실시했으며 태그 이름이 356 개인 개별 요소로 나왔습니다. 공평하게, 여기에는 html, head, body 및 다른 것들이 유용하지는 않지만, 여전히 유용합니다. 현재 Opera에 액세스 할 수는 없지만 크롬에서 여전히 자바 스크립트를 사용하고 있기 때문에 코드에서 허용하지 않는 이유는 알 수 없습니다.
두 번째로 @Khurram hassan의 경우이 경우 document.getElementById()
을 사용할 수 없습니다. 방금 Chrome에서 테스트했는데 null 값이 나타났습니다. 이론 상으로는 getElementBy*
과 반대로 getElementsBy*
의 일반 형식을 가진 모든 것이이 경우에 사용될 수 있습니다. 따라서 이전 답변에 덧붙이려는 시도에 따라 ClassName
, Name
및 TagNameNS
을 시도해보십시오. 이전과 같은 페이지에서 나는 그 세 가지를 테스트했으며 TagNameNS
만 작동했지만 나머지는 오류가 아닌 빈 목록을 반환했습니다.
코드에 <!DOCTYPE html>
이 필요 없다는 것이 사실이라면, 우리는 그것을 볼 수 있도록 답변을 편집하여 작업 코드를 게시 할 수 있습니다. <!DOCTYPE html>
은 내가 아는 한, 일반적으로 HTML 페이지를 시작하는 방법으로 일반적으로 받아 들여지는 것으로 간주됩니다. 필요하지 않다면 디버깅 또는 비공개 웹 페이지에서 유용 할 수있는 새로운 정보가 될 것입니다.
실제로 무엇을하려고합니까? 이 중 하나를 사용하지 않고 실제 문제를 해결할 수있는 더 나은 방법이있을 것입니다. – Nickolay