2013-09-21 58 views
1

我有一个简单的HTML代码:jQuery无法获得顶级父?

<section class="main"> 
    <div class="container"> 
     <div class="row"> 
      <header class="verticalCenter"> 
      ... 
      </header> 
     </div> 
    </div> 
</section> 

另外,我有这样的jQuery:

function verticalCenter(el) { 
    el.each(function() { 
     var elHeight = $(this).outerHeight(true), 
      parentHeight = $(this).parent('section').outerHeight(true), 
      marginTop = (parentHeight - elHeight)/2; 

     $(this).css('margin-top',marginTop); 
    }) 
} 

verticalCenter($('.verticalCenter')) 

问题是 - jQuery的没有看到section.main。我做错了什么?

回答

3

你想.closest(),不.parent()

parentHeight = $(this).closest('section').outerHeight(true), 

.parent()功能检查直接父。有效地传递一个选择符意味着“让我父母,但只有当父母匹配这个选择器;否则,给我一个空的列表。”

3

.parent()仅在DOM树上向上移动一级。在您的代码中,$(".verticalCenter")没有任何与选择器“部分”匹配的直接父节点。

.closest()同时获得与传递的选择器匹配的最接近的祖先。

$(this).closest('section.main')