【发布时间】:2023-09-28 13:17:01
【问题描述】:
我的问题不言自明——我正在编写一个用户指定选择器的 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 应用程序中做同样的事情。
【问题讨论】:
-
你已经拥有的有什么问题?
-
@BenG 对不起!我应该把它包括在内。我已经更新了 OP - 基本上 that.length 始终为 0,即使元素存在。
-
当我在 answer sn-p 工具中测试它时,它运行良好。
-
@BenG 我将如何重现您的测试?答案 sn-p 工具在哪里?
-
祝你好运,我也遇到了同样的问题。
标签: javascript jquery ruby-on-rails jquery-plugins turbolinks