2013-07-06 6 views
0

element.children에 대한 모든 설명서를 읽었습니다 (예 : MDN). 아직 Chrome에서 제대로 작동하지 않습니다. 나는 코드의 세그먼트는 함께 일하고 있어요 :Element.children Chrome에서 작동하지 않습니다.

<html><head> 
    <script src="loadxmldoc.js"></script> 
</head> 
<body><script> 
xmlDoc=loadXMLDoc("books.xml"); 

    document.write("<table border='1'>"); 
    var x=xmlDoc.getElementsByTagName("day"); 
    for (var i=0;i<x.length;i++){ 
    document.write("<td><table border='1'>"); 
    document.write("<tr><td>" + x[i].getAttribute("id") + "</td></tr>"); 

     var y=xmlDoc.getElementsByTagName("time"); 

     for (var j=0;j<y.length;j++){ 
      document.write("<tr><td><table border='1'>"); 
      document.write("<tr><td>Location: " + y[j].getAttribute("id") + ": "); 
      document.write("</table></td></tr>"); 
    } 
    document.write("</table></td>"); 
} 
document.write("</table>"); 
</script></body></html> 

문제는, getElementsByTagNamey.length (16)마다 만드는 대신 3,3,3,3,1의. 나는 childNodes을 사용했지만 텍스트 요소가 포함되었습니다. var y=x.item(i).children;을 사용했지만 Chrome에서는 작동하지 않습니다. FF로 작동하기 때문에 Chrome에서 지원하지 않거나 머리에 뭔가 빠져있는 것 같습니다. 그러나 all documentation I've found은 Chrome과 호환되어야한다고 말합니다.

올바른 사용법은 .children입니까? 아니면 Chrome에 문제가 있습니까?

+4

'var y = x [i] .getElementsByTagName ("time");','document.write'는 절대로 DOM을 조작하는 올바른 방법입니다. – adeneo

+1

@adeneo처럼,'document.write'를 사용하지 마십시오. 'document.getElementById ("container")와 같은 것을하십시오. appendChild (document.createElement ("tr"))' – sissonb

+0

나는 [here] 코드 (http://www.w3schools.com/xml/xml_to_html)를 따라 가고있었습니다. ASP). 여하튼, 나는 나중에 고치기 전에 전자를 없애려고 노력하고있다. –

답변

1

답을 도와 주신 @Felix Kling님께 감사드립니다.

참고로, .item가 FF에서 작동하는 이유는 크롬 NodeList를을 반환하면서 FF는 HTMLCollection를 반환한다는 것입니다. -Felix Kling

.children은 HTMLCollection에서만 작동합니다. NodeList는 수동으로 수행해야합니다. 요소 노드를 선택하여 배열로 던졌습니다. 내 크롬 버전 27 잘 다음 작품에

var x=xmlDoc.getElementsByTagName("day"); 
if(isFirefox){ //alternately, you can detect if HTMLCollection 
    var y=x.item(i).children; 
    document.write(y.length); 
} 
if(isChrome){ //alternately, you can detect if NodeList 
    var y = new Array(); 
    var currentChild = x.item(i).firstChild; 

    while(currentChild!=null){ 
     if(currentChild.nodeType == Node.ELEMENT_NODE){ 
      y[y.length]=currentChild; 
     } 
     currentChild=currentChild.nextSibling; 
    } 
} 
for (var j=0;j<y.length;j++){ 
    /* loop */ 
} 
0

에보십시오. children 속성이 모든 브라우저에서 작동하지 않을 수 있습니다.

관련 문제