2016-05-21 95 views
1

我的問題很自我解釋 - 我正在寫一個jQuery插件,用戶指定一個選擇器。我需要檢查該選擇器是否存在,如果有,請執行一些代碼。但是,我無法弄清楚如何在我的jQuery插件中進行檢查。如何檢查jQuery插件中是否存在元素?

我需要這樣做,因爲我試圖創建類似jquery-readyselector(https://github.com/Verba/jquery-readyselector)與Turbolinks一起使用的東西。

我希望能夠使用的功能,像這樣:

$("#mySelector").pageReady(function() { 
    // This is only triggered if #mySelector exists. 
    console.log('test') 
}); 

這裏是我的嘗試:

(function($) { 
    $.fn.pageReady = function(fn) { 
    var that = this; 
    $(document).on('ready page:load', function() { 
     if (that.length <= 0){ 
     return 
     } else { 
     fn(); 
     } 
    }); 
    } 
})(jQuery); 

這樣做的問題是,that.length == 0,即使元素存在。

我也試圖定義功能的內部「準備頁:加載」,但我得到pageReady不是一個函數:

$(document).on('ready page:load', function() { 
    $.fn.pageReady = function(fn) { 
    if (this.length <= 0) { 
     return 
    } else { 
     fn(); 
    } 
    } 
}); 

請注意,我使用Turbolinks與Rails的,這就是爲什麼我有$(document).on('ready page:load' ...)。用$(document).ready(...)替換該行將在非Rails/Turbolinks應用中執行相同的操作。

+0

你現在有什麼不對? – BenG

+0

@BenG對不起!我應該包括這一點。我更新了OP - 基本上,即使元素存在,length也始終爲0。 – chintanparikh

+0

當我在答案片段工具中測試它時,它工作正常。 – BenG

回答

-2
$('#selectorId').length > 0 

$('.selector').length > 0 
+0

我在這個問題中增加了更多信息 - 請看看。我不在$(document).ready()中調用這個插件。 – chintanparikh

+0

另外這是在一個插件的上下文中,如果你閱讀我的代碼,我已經試過了。 – chintanparikh

0

我有同樣的問題,是絕對困惑的是,ID的長度可能爲零甚至是在頁面上。我檢查了源代碼,並且ID在那裏!原來,我在測試

$('mySelector').length > 1 

而不是

$('#mySelector').length > 1 

即我離開了#。我知道上面的問題沒有這個錯誤,但我注意到,在一個代碼片段工具中測試了BenG問題,並且它工作正常,所以也許最初的代碼已經排除了#。無論如何,我想其他人會犯同樣的錯誤,所以這個答案應該對他們有用。