2014-02-12 40 views
0

我想使用jScrollPane的scrollToElementAPI link)滾動到最接近的div實例。

我試圖使用jQuery的$(this)closest()來形成將通過傳遞到scrollToElement的變量。

,但我認爲無論我執行$(this)不正確,或這樣的變量是不是因爲它不觸發滾動操作可接受的參數類型。

的錯誤信息是:

Uncaught TypeError: Cannot read property 'top' of undefined

如何使用$(this)closest()形成通過傳遞給scrollToElement變量?

的jsfiddle

包括例如工作和非工作參數的:

http://jsfiddle.net/rwone/bUbm8/

HTML

<div id="main_content"> 
    <div class="click_me">CLICK ME</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <div>test</div> 
    <a class="target">target</a> 
</div> 

的jQuery

function initScrollPane(){ 
    var jScrollPaneSettings = { 
     hijackInternalLinks: true, 
     animateScroll: true, 
     animateDuration: 600, 
     contentWidth: '0px' 
    }; 
    var mainContent = $('#main_content') 
    mainContent.jScrollPane(jScrollPaneSettings); 
    var apiMainContent = mainContent.data('jsp'); 
    apiMainContent.reinitialise(); 

    $(document).on("click",".click_me", function(e) { 
     e.preventDefault(); 
     // DOESN"T work 
     // var myVar = $(this).closest(".target"); 
     // DOES work 
     var myVar = $(".target:first"); 
     //apiMainContent.scrollToElement(".target");  
     apiMainContent.scrollToElement(myVar); 
    }); 
} 

initScrollPane(); 

編輯:

這也是我的理解是closest()可以搜索down這就是爲什麼我用每以下鏈接特定方法的樹,但也許這種理解是不正確的:

https://stackoverflow.com/a/5139438/1063287

回答

0

對此,您不能使用closest(),因爲它的工作原理是「通過測試元素本身並遍歷通過它的祖先在DOM樹中。「 (Documentation

如果您有多個目標,則需要使用siblings()Documentation),然後搜索最近的一個。有關示例,請參見answer

2

您錯誤地使用了closest()closest()爲得到最接近parents()。在你的情況下,有兩種方法。

首先是:

var myVar = $(this).siblings(".target"); 

二是

var myVar = $(this).parent().find('.target'); 
相關問題