2011-03-02 3 views
5

내가이 DOM 트리가 노드 :에서는 일부 특정 아이를 통해 루프

<li> 
data .... 
    <br> 
    data ... 
    <img ... /> 
    <br> 
    <script> ... </script> 
    <span> data ... </span> 
</li> 

을 내가 어떻게 리튬 자체 스크립트 요소, 즉, 스크립트 및 스팬 사이에 속하는 위의 리튬 요소의 자식을 반복 요소가 루프 밖으로 ... advace의 덕택으로 !!

참고 : 내 앱이 Protoype을 사용하고 있기 때문에 JQuery를 사용하고 싶지 않습니다. 둘 다 함께 사용하면 JQuery와 충돌하므로 Prototype을 사용하는 빠른 솔루션이 있으면 감사하겠습니다.

답변

8

이 작품이 좋을까요?

var child = liElement.firstChild; 
while(child){ 
    if(child.nodeName.toLowerCase() == 'script'){ 
     break 
    } 
    //do your stuff here 
    child = child.nextSibling; 
} 

예제의 "데이터"가 문자열 인 경우, 이는 하위 계층에 textNodes의 인스턴스로 존재합니다.

:이 물건에 특수 처리를 할 필요가 있다면, 당신은 더 많은 노드 유형 여기
+0

정말 고맙습니다. 조단펄 .. 정확히 내가 원하는 .. – JaHelia

-1

jvery에서 살펴 보았습니까? 아주 멋진 쿼리 구문을 가지고 있습니다. 반복 할 요소가 정확히 무엇인지 알고 싶습니다. $ ('li> img')는 모든 목록 항목에서 모든 이미지를 반환합니다. 의 사양을 확인 더 jquery

당신의 jQuery 셀렉터를 사용할 수
+0

내가 할 수없는 사용자 JQuery와 내 응용 프로그램에서 프로토 타입을 사용하고 있는데 내가 그것을 사용하는 경우가 JQuery와 충돌 때문입니다. – JaHelia

+0

오케이, 편집을 보았습니다. JeHelia가 JQuery를 사용할 수 없다는 사실을 추가하기 전에 -1을 한 사람에게 대답했습니다. – Menahem

2

: 선택을 통해 다음 루프

$('li').children().not('script').not('span'); 

:

$('li').children(); 

제외 원치 않는 요소 :

모든 <li>의 아이를 가져 오기 :

$('li').children().not('script').not('span').each(function(index, element){ 
    //do sth like hide the element 
    $(element).hide(); 
}); 
+0

BTW : jQuery는 '$'를 사용하는 다른 라이브러리에서도 훌륭하게 재생할 수 있습니다. 이 문제에 대해 충돌 모드가 없습니다. http://api.jquery.com/jQuery.noConflict/ – gunnarsson

+0

이 방법을 사용했지만 (noConflict) 문제가 아니며 많은 페이지에서 사이트가 다운되고 특별한 이유가 없습니다. 그 경우, Jquery 라이브러리를 제거해도 충돌이 발생하지 않습니다. – JaHelia

+0

셀렉터 라이브러리를 다운로드하면 쉽게 jQuery 선택기 및 기타 기능을 사용할 수 있습니다. –

1

에 대한 검사 등

switch(child.nodeType){ 
case 3: 
    //text Node 
    break; 
case 1: 
    //Element node 
    break; 
default: 
    //break; 
} 

체크 아웃 https://developer.mozilla.org/en/nodeType을 할 내가 당신을 위해 해킹 솔루션을 것 원할 것입니다

$("li").each(function(index) { 
console.log($(this).find("span:first").text()); 
}); 

first span in Li