2015-01-19 3 views
0

범위가 아닌 모든 요소를 ​​가져 오는 함수를 원합니다.범위가 아닌 모든 요소 가져 오기

현재 모든 요소를 ​​가져오고 빈 배열을 만드는 함수를 만들었습니다. 그런 다음 각 요소를 거쳐 범위가 아닌 경우 빈 배열에 추가합니다. 그리고 아마도 더 이상 비어 있지 않은 배열을 반환합니다.

이 방법이 효과가 있지만 다소 비효율적입니다. 나는 처음부터 범위를 확보하지 않는 것이 더 좋을 것이라고 생각합니다. 그리고 이것에 대해 모르는 몇 가지 방법이 있어야합니다.

범위가 아닌 모든 요소를 ​​얻을 수있는 효율적인 방법이 있습니까? (이것은 iOS의 UIWebViews에 표시되는 epub이며 jquery는 없습니다)

다음은 현재 코드입니다.

function allElementsExceptSpans() 
{ 
    var result = new Array(); 
    var allElements = document.getElementsByTagName('*'); 
    for (var i = 0; i < allElements.length; i++) 
    { 
     if ((allElements[i].tagName != "span") 
      && (allElements[i].tagName != "SPAN")) 
     { 
      result.push(allElements[i]); 
     } 
    } 
    return result; 
} 

답변

6

querySelectorfriends 그들의 인수로 CSS 선택기를 받아 : 나는 바보 같은 일을하고 있다면이 자바 스크립트 사람이 아니에요으로 나는, 죄송합니다. 기존 접근 방식을 단순화하고 싶었다면, 당신은 toLowerCase 대신 두 개의 서로 다른 문자열 비교를 사용 Array.prototype.filter를 사용하는 대신 수동으로 값을 복사에서

var not_span = document.querySelectorAll(":not(span)"); 

볼 수 있습니다 :

function allElementsExceptSpans() 
{ 
    return Array.prototype.filter.call(document.getElementsByTagName("*"), function(element) { 
     return element.tagName.toLowerCase() !== "span"; 
    }); 
} 
+0

가 제공 귀하 브라우저는': not'를 지원하는데, 이것은 CSS3입니다. 예를 들어, IE8은 아니지만 아직 IE8은 놀라운 시장 점유율을 가지고 있습니다. (IE8은 새로운 IE6입니다! 그러나 오래 가지 못했을 것입니다.) –

+0

IE8에서 상황이 좋지 않을 경우 행복감은 걱정하지 않는 클라이언트입니다. – Quentin

+0

감사합니다. 잘 모르겠습니다. 이 접근 방식 (서면)이 대문자 SPAN을 놓치고 있습니까? – narco