如何检查jQuery插件中是否存在元素?

时间:2016-05-21 11:42:07

标签: javascript jquery ruby-on-rails jquery-plugins turbolinks

我的问题非常自我解释 - 我正在编写一个jQuery插件,用户指定一个选择器。我需要检查该选择器是否存在,如果存在,则执行一些代码。但是,我无法弄清楚如何在我的jQuery插件中进行检查。

我需要这样做,因为我正在尝试创建类似于与Turbolinks一起使用的jquery-readyselector(https://github.com/Verba/jquery-readyselector)。

我希望能够像这样使用这个功能:

$("#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,即使该元素存在。

我也尝试在'ready page:load'中定义函数但是我得到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应用程序中执行相同的操作。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并且即使在页面上,id的长度也可能为零,这绝对是神秘的。我检查了源代码,id就在那里!原来我正在测试

$('mySelector').length > 1

而不是

$('#mySelector').length > 1

即。我遗漏了#。我知道上面的问题没有这个错误,但是我注意到BenG在一个片段工具中测试了问题并且它有效,所以也许原始代码遗漏了#。无论如何,我想其他人也会犯同样的错误,所以这个答案应该对他们有用。

答案 1 :(得分:-2)

$('#selectorId').length > 0

$('.selector').length > 0
相关问题