2013-06-06 3 views
-1

Chrome의 콘솔에서 요소를 완벽하게 탐색 할 수 있지만 중첩 된 DocumentFragment에 대한 참조를 childNodes 또는 firstChild으로 가져올 수 없습니다.중첩 된 DocumentFragment에 액세스

여기 jsFiddle의 코드입니다 : http://jsfiddle.net/Ge8au/2/

여기에 코드입니다 :

function withoutJquery(html) 
{ 
    var temp = document.createElement("div"); 
    temp.innerHTML = html; 

    var fragment = document.createDocumentFragment(); 
    var child; 

    while (child = temp.firstChild) 
    { 
     fragment.appendChild(child); 
    } 

    return fragment.firstChild; 
} 


function withJquery(html) 
{ 
    var fragment = document.createDocumentFragment(); 

    fragment.appendChild(jQuery.buildFragment([html],document)); 

    return fragment.firstChild; 
} 


var ajaxHTML = ""; 
ajaxHTML += "<template>\n"; 
ajaxHTML += " <div>asdf</div>\n"; 
ajaxHTML += " <div>\n"; 
ajaxHTML += "  <span>asdf</span>\n"; 
ajaxHTML += " </div>\n"; 
ajaxHTML += "</template>"; 


// Gives the <template> 
console.log(withoutJquery(ajaxHTML)); 
console.log(withJquery(ajaxHTML)); 

// Where are the <div>'s? 
console.log(withoutJquery(ajaxHTML).childNodes.length); 
console.log(withJquery(ajaxHTML).childNodes.length); 
+0

최신 console.log에서 예상되는 결과는 무엇입니까? 그것은 나를 위해 잘 작동하는 것 같아요 (길이 5, 2 div 및 3'\ n') –

+0

jquery를 사용할 수 있다면 컨텍스트 선택 즉 $ ('nodes', fragment)로 할 수 있습니다. ; – adrian

+0

@Py. Safari에서 작동하지만 최신 Chrome –

답변

1

대신 fragment.firstChildfragment.firstChild.content을 돌아보십시오.

이 브라우저에 의해 다소 차이가 나타납니다 때문에, 더 나은 솔루션은 다음과 같이 될 것이다 :

var toReturn = fragment.firstChild; 
return (toReturn.content ? toReturn.content : toReturn.childNodes); 

childNodes뿐만 아니라 필요 여부에 대한 브라우저에 의해 약간의 혼동이있을 것 같습니다 - 위의 코드와 함께 , console.log() 문에서 childNodes을 제거 할 수 있습니다.

+0

Safari에서는 작동하지 않습니다. –

+0

원본 코드가 작동합니까? 사파리에서? – jcsanyi

+0

이 작동 :: 조각 = (fragment.content)? fragment.content : fragment.childNodes; –

관련 문제