2013-10-28 2 views
4

대상 요소에 가장 가까운 요소 (모든 요소)에 Z- 색인이 있는지 확인하는 올바른 방법이 있습니까?Z- 인덱스가있는 가장 가까운 요소를 결정 하시겠습니까?

예를 들어 DOM의 레이어에 div를 추가하고 레이어 근처에 요소가 있는지 알고 싶습니다. 따라서 레이어 아래에 손실되지 않도록 해당 div의 위치를 ​​지정할 수 있습니다. 어디서 언제 추가 될지 알 수 없기 때문입니다.

감사합니다.

편집 :

내가 동적 페이지에 힌트를 추가 힌트 플러그인이 다음 서버에 저장합니다. 나는 코드를 게시 하겠지만 내 질문에는 그다지 관련성이 없을 것 같다.

+0

여기에 코드를 표시 하시겠습니까? – nrsharma

답변

2

다음과 같은 기능이 있습니다. 그것은 Z- 인덱스를

function getElement($target){ 
     var $parents = $target.parents(); 
     for(var i=0;i<$parents.length;i++){ 
      if($parents[i].css('z-index').length>0){ 
       return $parents[i]; 
      } 
     } 
     return false; 

    } 
+0

좋은 생각입니다. 비록 오히려 느리게 느껴질 지 모르지만, 동시에 첨부 된 모든 힌트에 대해 많은 순회가 진행될 것이기 때문에. 나는 부모()를 고정 된 수의 수로 제한하고 그것을 시도 할 것입니다. 감사. – nainy

+0

예. Thats a good idea – Sethunath

+0

@nainy parents() 메서드는 첫 번째 멤버가 가장 가까운 부모가되는 배열을 반환합니다. 그래서 위의 대답은 가장 가까운 요소를 가장 멀리에서 확인할 것입니다. 그래서 결과가 나오지 않을 것이라고 생각합니다. 응답을 얻기 위해 너무 많은 순회가 필요하지만 최소 순회 횟수. 이 경우 검사 할 특정 유형의 요소 배열을 가져 오는 것이 좋습니다. –

-1

이 있다면 그것은 당신이 당신의 Z- 인덱스를 찾으려면 inspect the element에 (크롬에 내장) Firefox firebughttps://getfirebug.com/ 또는 Chrome Developer Tools를 사용할 수있는 요소의 부모와 각 검사를 통과.

div 근처에 요소를 추가하는 것은 z- 색인 속성과 관련이 없습니다. z-index은 개체가 겹칠 때 앞에 번호가 가장 큰 요소를 가져옵니다. 그렇지 않으면 찾고있는 자산이 아닙니다. 특히 다른 요소에 대해 z-index 속성을 정의하지 않은 경우

CSS 특이성은 내가 Sethunath에서 하나와 유사한 솔루션입니다 here

+0

미안하지만, 제 질문에 대해 오해 한 것 같습니다. 내 잘못일지도 모릅니다. 페이지에있는 다른 요소와 동일한 수준으로 추가 할 div가 있는지 확인해야합니다. 내가 할 수있는 유일한 방법은 div가 추가 된 특정 레이어에서 가장 가까운 Z- 인덱스를 어떻게 든 결정한 다음 해당 div에 대해 훔칩니다. 그것은 모두 동적으로 일어납니다. – nainy

+0

왜 높은 z- 인덱스로 요소를 추가 할 수 없습니까? ex, 1000. 그런 식으로 항상 앞쪽에있게됩니다. – MCSharp

+0

그런 식으로하면 너무 높을 수 있습니다 (즉, 모든 힌트가 레이어 위에 놓여져 있지 않아야 함) 또는 너무 낮을 수 있습니다 (많은 Z- 인덱스가있는 레이어, 모달 및 팝업). – nainy

0

을 찾고 수 있습니다 것입니다.

/** 
* Helper to retrieve the z-index which is required to bring up the dragged element in front. 
* @returns {undefined} 
*/ 
getZIndex: function() { 
    if (this.z_index === undefined) { 

     var recrusive_z_index_search = function(element) { 

      // Break on body. 
      if (element[0] === $('body')[0]) { 
       return 2; 
      } 

      // Get parent element 
      var parent = $(element).parent(); 

      // Check if parent has z-index 
      var z_index = parent.css('z-index'); 
      if (z_index.length > 0 && !(/\D/).test(z_index)) { 

       // Return found z-index. 
       return z_index; 
      } 

      // Z-index not found, try again on next parent. 
      return recrusive_z_index_search(parent); 
     }; 

     this.z_index = recrusive_z_index_search($(this.element)); 

    } 
    return this.z_index; 
}, 

이 솔루션은 객체 클래스 내에 추가되었습니다. this.element는 검색 할 곳의 시작점입니다. z-index가 "auto"로 설정 될 수 있기 때문에 실제로 z-index 요소가 숫자 값이 아닌 요소를 찾은 경우 중지됩니다. 우리가 시체에 도달하면 우리는 체인을 끊고 폴백으로 기본적으로 2로 설정합니다.

다른 사람들에게 도움이되기를 바랍니다.

관련 문제