我的问题非常自我解释 - 我正在编写一个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应用程序中执行相同的操作。
答案 0 :(得分:0)
我遇到了同样的问题,并且即使在页面上,id的长度也可能为零,这绝对是神秘的。我检查了源代码,id就在那里!原来我正在测试
$('mySelector').length > 1
而不是
$('#mySelector').length > 1
即。我遗漏了#
。我知道上面的问题没有这个错误,但是我注意到BenG在一个片段工具中测试了问题并且它有效,所以也许原始代码遗漏了#
。无论如何,我想其他人也会犯同样的错误,所以这个答案应该对他们有用。
答案 1 :(得分:-2)
$('#selectorId').length > 0
或
$('.selector').length > 0