2010-06-22 5 views
1

Camino 브라우저에서 요소의 자식을 가져 오지 않는 것은 이상한 것입니다. 다른 모든 브라우저에서 작동합니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까? 구글은 시작 경고라고 더 도움이 :(이 경우javascript Camino 브라우저에서 .children이 작동하지 않습니다.

var site_result_content = document.getElementById(content_id); 
    site_child_nodes = site_result_content.children; 
    alert('started'); 
    for(i=0;i<site_child_nodes.length;i++) { 
     alert('cycle1'); 
     document.getElementById(site_child_nodes[i].id).className = 'tab_content'; 
     ShowHide(site_child_nodes[i].id,'hidden'); 
    } 

없지만, 끄기주기는 없습니다.

답변

2

사용 childNodes 대신. children는 독점적 인 속성으로 시작하는 IE에있는 반면, childNodes는 W3C의 DOM 사양이며 지난 10 년 출시 된 모든 주요 브라우저에서 지원됩니다. 차이가 childNodes 모든 유형의 포함 반면 children는 텍스트 노드 및 주석 노드 특히, 단지 요소가 포함되어 있다는 것입니다. 나는했습니다

아래 코드를 최적화하십시오. i과 같은 루프에서 사용되는 변수를 포함하여 모든 변수를 var으로 선언해야합니다. 또한 document.getElementById(site_child_nodes[i].id)은 필요하지 않습니다. 요소에 ID가없고 정확하게 site_child_nodes[i]과 같으면 실패합니다.

var site_result_content = document.getElementById(content_id); 
var site_child_nodes = site_result_content.childNodes; 
alert('started'); 
for (var i = 0, len = site_child_nodes.length; i < len; ++i) { 
    if (site_child_nodes[i].nodeType == 1) { 
     alert('cycle1'); 
     site_child_nodes[i].className = 'tab_content'; 
     ShowHide(site_child_nodes[i].id, 'hidden'); 
    } 
} 
1

아직 구현되지 않았습니다 (Firefox 3.5에서만 구현되었습니다). 대신 childNodes을 사용할 수 있습니다. 이는 요소가 아닌 노드 목록을 반환합니다. 그런 다음 nodeType을 확인하여 요소인지 확인하십시오.

var site_result_content = document.getElementById(content_id); 
site_child_nodes = site_result_content.childNodes; 
alert('started'); 
for(i=0;i<site_child_nodes.length;i++) { 
    // Check this is actually an element node 
    if (site_child_nodes[i].nodeType != 1) 
     continue; 

    alert('cycle1'); 
    document.getElementById(site_child_nodes[i].id).className = 'tab_content'; 
    ShowHide(site_child_nodes[i].id,'hidden'); 
} 
관련 문제