2011-10-03 4 views
0

이 설정을 사용하여 요소의 index()를 찾았지만 같은 노드 이름을 가진 동일한 레벨의 요소를 조사해야합니다.동일한 노드 이름의 jquery find()를 찾으십시오.

반환 번호가 예상과 다를 수 있습니다. 코드 주석을 참조하십시오. filteredByNodeNameIndex를 '2'로 지정합니다.

희망이 예제 코드는 충분히 분명하다 :이 잘못이다

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>TestDrive</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
    <script type="text/javascript" > 
     function TestDrive() 
     { 
      var $obj = $("#div2"); 
      console.log("$obj.length:" + $obj.length); // returns: 1 

      var $filtered = $obj.parent().children($obj[0].nodeName); // find all divs in same parent 
      console.log("$filtered.length:" + $filtered.length); // returns: 3 

      var $obj_clone = $filtered.find($obj); // find original element again. Is something wrong here? 
      console.log("$objAgain.length:" + $obj_clone.length); // returns: 0 

      var filteredByNodeNameIndex = $obj_clone.index(); // i want the number 2 here 
      console.log("filteredByNodeNameIndex:" + filteredByNodeNameIndex); // returns: -1 
     } 
    </script> 
</head> 
<body onload="new TestDrive()"> 
    <div id="container"> 
     <!-- some random elements just for test --> 
     <a></a> 
     <div id='div1'></div> 
     <div id='div2'></div> 
     <span></span> 
     <span></span> 
     <a></a> 
     <div></div> 
     <a></a> 
    </div> 
</body> 
</html> 

는 누구 발견 할 수 있습니까?

+0

무엇을 작동하지 않는 찾습니다 다음 필요하십니까? 숫자가 잘못 나오는가, 코드가 날려 버리는가? –

+0

숫자가 예상 한 것과 다릅니다. 코드 주석을 참조하십시오. filteredByNodeNameIndex를 '2'로 지정합니다. var filteredByNodeNameIndex = $ obj_clone.index(); // 여기서 2 번을 원합니다. –

답변

5

봅니다 :

var $obj_clone = $filtered.filter($obj); 

.find의 문제는 일치하는 요소의 자식이 아닌 형제 자매를 찾는 것입니다. 워드 프로세서 :

는 선택기의 jQuery 객체 또는 소자에 의해 정합 필터링 요소의 현재 세트의 각 요소의 하위 얻기. .filter 비교

:

선택기 또는 일치하는 것과 유사한 요소들을 감소 함수의 테스트를 통과한다.

+0

감사합니다. 정말 도움이되었습니다. –

1

세 번째 시도에서, 원하는 값을 분명히 반환하지 않는 자식을 찾으려고합니다.

일러스트 : .filter 대신 .find의를 사용하여

var $filtered = $obj.parent().children($obj[0].nodeName); 
//Select set A 

var $obj_clone = $filtered.find($obj); 
//Search for set A among the CHILDREN of set A --> Fails, obviously? 

var filteredByNodeNameIndex = $obj_clone.index(); 
//Unexpected results. 
+0

사실이지만이를 고치는 방법은 설명하지 않습니다. 'filter'에 대한 다른 응답을보십시오. –

+1

질문은 "문제를 해결하는 방법"이 아니라 "무엇이 잘못 되었습니까?"라는 질문이었습니다. –

+0

감사합니다. 이것은 정말로 도움이되었습니다. –

2

find은 선택한 노드의 하위 노드 만 검색합니다. filter 님의 기능을 사용하려고합니다.

 var $obj_clone = $filtered.filter($obj); // find original element again. Is something wrong here? 
0

시도 :

var $obj_clone = $filtered.filter($obj); 

.find()는 어린이

관련 문제