복붙노트

[JQUERY] jQuery를에 깊은 아이를 선택

JQUERY

jQuery를에 깊은 아이를 선택

해결법


  1. 1.편집 : 이것은 아마 내 원래의 대답보다 더 나은 방법입니다 :

    편집 : 이것은 아마 내 원래의 대답보다 더 나은 방법입니다 :

    예 : http://jsfiddle.net/patrick_dw/xN6d5/5/

    var $target = $('#SearchHere').children(),
        $next = $target;
    
    while( $next.length ) {
      $target = $next;
      $next = $next.children();
    }
    
    alert( $target.attr('id') );
    

    심지어 약간 짧은이되는 :

    예 : http://jsfiddle.net/patrick_dw/xN6d5/6/

    var $target = $('#SearchHere').children();
    
    while( $target.length ) {
      $target = $target.children();
    }
    
    alert( $target.end().attr('id') ); // You need .end() to get to the last matched set
    

    원래 답 :

    이 작업에 보일 것입니다 :

    예 : http://jsfiddle.net/xN6d5/4/

    var levels = 0;
    var deepest;
    
    $('#SearchHere').find('*').each(function() {
        if( !this.firstChild || this.firstChild.nodeType !== 1  ) {
            var levelsFromThis = $(this).parentsUntil('#SearchHere').length;
            if(levelsFromThis > levels) {
                levels = levelsFromThis;
                deepest = this;
            }
        }
    });
    
    alert( deepest.id );
    

    당신이 가장 깊은 특정 태그 (또는 다른 것을) 될 것이라고 알고 있다면, 당신은 예를 들어 .find ( 'DIV')와 ( '*') .find 교체하여 속도를 높일 수 있습니다.

    편집 : 현재 요소가 firstChild이 없거나이하는 경우 firstChild는 1 형 노드 아니라고 경우에만 길이를 확인하도록 업데이트되었습니다.


  2. 2.여기 @ user113716에서 대답에 약간의 개선이 버전은 더 어린이와 반환 대상 자체가없는 경우를 처리합니다.

    여기 @ user113716에서 대답에 약간의 개선이 버전은 더 어린이와 반환 대상 자체가없는 경우를 처리합니다.

     (function($) {
    
        $.fn.deepestChild = function() {
            if ($(this).children().length==0)
                return $(this);
    
            var $target = $(this).children(),
            $next = $target;
    
            while( $next.length ) {
              $target = $next;
              $next = $next.children();
            }
    
            return $target;
        };
    
    }(jQuery));
    

  3. 3.난 당신이 바로 그것을 할 수 있다고 생각하지 않습니다하지만 당신은 시도 할 수 있습니다

    난 당신이 바로 그것을 할 수 있다고 생각하지 않습니다하지만 당신은 시도 할 수 있습니다

    var s = "#SearchHere";
    while($(s + " >div ").size() > 0)
        s += " > div";
    alert( $(s).attr('id') );
    

  4. 4.이 체인 가능 한 줄이 나를 위해 일하지만, 아래의 계층 구조에 하나의 리프 노드가 가정합니다.

    이 체인 가능 한 줄이 나를 위해 일하지만, 아래의 계층 구조에 하나의 리프 노드가 가정합니다.

    jQuery("#searchBeginsHere")
      .filter(function(i,e){ return jQuery(e).children().size() === 0; })
    

  5. 5.버전은 각각의 잎에 대한 깊은을 얻을 수 있습니다.

    버전은 각각의 잎에 대한 깊은을 얻을 수 있습니다.

    http://jsfiddle.net/ncppk0zw/14/

    var found = $('#SearchHere *');
    
    for (var i = 0; i < found.length; i++) {
        if (i > 1) {
            if (found[i].parentNode !== found[i-1]) {
                // Deepest. Next element is other leaf
                console.log(found[i-1]);
                continue;
            }
            if (i == found.length-1) {
                // Deepest. Last element in DOM tree
                console.log(found[i]);
            }
        }
    }
    

  6. 6.이 페이지의 유형 "PARAM"의 가장 깊은 요소를 찾을 수 있습니다. 유용한 당신은 깊은, 또는 무엇이든을 찾고 있다면.

    이 페이지의 유형 "PARAM"의 가장 깊은 요소를 찾을 수 있습니다. 유용한 당신은 깊은, 또는 무엇이든을 찾고 있다면.

    function deepest_child(param) {
        var element_list = $(param)
        var depth = 0
        var deepest_element
        element_list.each(
            function (index) {
                this_depth = $(this).parents().length
                if (this_depth > depth) {
                    depth = this_depth 
                    deepest_element= $(this)
                }
            })  
        return deepest_element
    }
    
  7. from https://stackoverflow.com/questions/3787924/select-deepest-child-in-jquery by cc-by-sa and MIT license