2014-01-24 4 views
1

getElementsByClassName으로 추출한 요소 배열을 사용하는 스크립트가 Firefox에서 작동합니다. 이 방법은 IE8에서 지원되지 않으므로 querySelectorAll을 대신 사용해야합니다. 내 문제는 querySelectorAll 실제 요소에 라이브 참조가 아닌 정적 목록을 만듭니다.querySelectorAll의 라이브 노드

내 스크립트

function subMenu(sCat,gCat,sh,gh,selection) 
{ 
    sElements = document.querySelectorAll('cat'+sCat); 
    gElements = document.querySelectorAll('cat'+gCat); 

// sElements = document.getElementsByClassName('cat'+sCat); 
// gElements = document.getElementsByClassName('cat'+gCat); 

if(sh>0) 
    { 
    for(i=0;i<sElements.length;i++) 
     { 
     if(!(h = window.getComputedStyle(sElements[i],null).height)) {h=sElements[i].currentStyle;} 
     nh = parseInt(h.replace("px",""))-4; 
     sElements[i].style.height = nh+"px"; 
     } 
    sh=sh-4; 
    } 
if(gh<100) 
    { 
    for(i=0;i<gElements.length;i++) 
     { 
     if(!(h = window.getComputedStyle(gElements[i],null).height)) {h=gElements[i].currentStyle;} 
     nh = parseInt(h.replace("px",""))+4; 
     gElements[i].style.height = nh+"px"; 
     } 
    gh=gh+4; 
    } 
if(sh>0 || gh<100) {xMenu=setTimeout("subMenu("+sCat+","+gCat+","+sh+","+gh+",'"+selection+"')",10);} 
else 
    { 
    fadeOut(selection); 
    } 
} 

난 괜찮아하지만 IE8에서 작동하는 스크립트를 주석있다. getComputedStyle 또는 currentStyle 속성이 작동하는지 여부는 모르겠지만 style.height 속성을 defintiely로 설정하는 것은 아닙니다.

그래서 내 질문 :

  1. 는 getElementsByClassName 유사 IE8에서 라이브 노드 목록을 얻을 수있는 방법이 있나요?

  2. 누군가가 querySelectorAll에서 배열을 요소 객체의 배열로 변환하는 방법을 제안 할 수 있습니까?

답변

1

querySelectorAll은 선택기가 예상 함을 나타냅니다. 그는 IE8을 지원하는 것

realArray = Array.prototype.slice.call(pseudoArray); 
+1

하지만 배열 트릭은 IE8에서 작동하지 않습니다

sElements = document.querySelectorAll('.cat'+sCat); -^- 

실제 배열로 변환하려면 클래스는 CSS처럼, 점으로 시작합니다. – rvighne

+0

감사합니다. QuerySelector 문제가 해결되었습니다. 그 이상의 문제가 여전히 있지만 그게 내 문제 였어. 추측 '정적'은 요소 목록이 아니라 속성 목록을 참조합니다. – illusivetech

관련 문제