我怎么能给我的属性的默认数组访问传入的jQuery对象在我的插件
How can I give my default array of properties access to the passed jQuery object in my plugin?
假设我有以下插件,包含在一个立即调用的函数表达式中:
$.fn.someFunc = function(tags, options) {
// Containing element
$self = $(this);
opts = $.extend({}, $.fn.someFunc.defaults, options);
// More code here
return $self;
}
$.fn.someFunc.defaults = {
property: { prop: value, prop2: value2 },
anotherProp : { prop: value, prop2: value2 }
}
我如何给我的数组$.fn.someFunc.defaults
访问我的$self
变量?假设我想将$.fn.someFunc.defaults.property.prop
的默认值设置为依赖于插件已提供访问的元素的某些内在属性的东西?如:
$.fn.someFunc.defaults = {
property: { prop: $self.width(), prop2: value2 }, // This currently does not work
anotherProp : { prop: value, prop2: value2 }
}
当前尝试这样做会导致ReferenceError: $self is not defined
错误。什么好主意吗?
你不能这样做。由于$self
是someFunc
的局部变量,因此需要将其传递给defaultoptions
。
试试这个:
设置默认选项为function
$.fn.someFunc.defaults = function(){
return { property: { prop: this.width(), prop2: value2 }, // This currently does not work
anotherProp : { prop: value, prop2: value2 }};
}
NOT正在做的是通过从扩展函数返回对$(this)
对象的引用来暴露$self
对象
尝试添加return $self
$.fn.someFunc = function(tags, options) {
// Containing element
$self = $(this);
opts = $.extend({}, $.fn.someFunc.defaults, options);
return $self;
}
这就是插件允许链接和访问被操纵的数据/元素的方式。
我认为你做不到。$self
(以及它来自的this
)仅在调用函数时定义,这是明智的,因为它可以根据您调用函数的内容而变化。
你在函数外定义默认值,所以this
是未知的,它在这一点上也被计算。理想情况下,你想要做的是,只在函数执行过程中对变量求值。有很多方法可以做到这一点,但对于以后尝试更改默认值的人来说,它们会使事情过于复杂。
有几个简单的选项,要么在函数
中定义这些默认值$.fn.someFunc = function(tags, options) {
// Containing element
$self = $(this);
derived_defaults = {
property: { prop: $self.width() }
};
opts = $.extend(true, derived_defaults, $.fn.someFunc.defaults, options);
// More code here
return $self;
}
$.fn.someFunc.defaults = {
property: { prop2: value2 }, // This currently does not work
anotherProp : { prop: value, prop2: value2 }
}
有人仍然可以在外部覆盖这个默认值(你需要记录这是可能的),但他们不能做一些依赖于访问$self
的事情。
或者——如果这个值与一些具体的东西有关,比如宽度——你可以在内部处理它,所以允许像'100px'这样的值作为绝对值,'90%'使用$self
的90%的宽度。您可以在插件中检测到这一点,并派生出正确的值。
这些信息不应该存储在options数组中。选项用于配置。你不需要DOM元素来填充这些默认选项。
试试这个jQuery插件:
https://github.com/guidobouman/jquery-plugin-boilerplate
一个相当流行的jQuery插件就是基于这个样板文件:
https://github.com/guidobouman/jquery-panelsnap
该插件获取CSS样式并存储该值。通过这种方式,用户可以为他的内容设置样式,而插件也可以选择。在javascript中配置插件的宽度必然会产生问题。样式属于CSS。
Javascript: Function, CSS: Style
免责声明:提供的链接指向我编写的代码。
编辑:
如果你想从元素中获得特定的数据,我会将其存储在插件的不同属性中。要从DOM元素获取所有基于data-
的属性,请使用以下命令:
$.fn.someFunc = function(tags, options) {
// Containing element
$self = $(this);
opts = $.extend({}, $.fn.someFunc.defaults, options);
element_data = $self.data();
// More code here
return $self;
}
注意:我没有纠正你代码中的linting错误。
您正在返回错误的对象($(this)
)。换句话说,您返回的是封装在另一个jquery对象中的jquery对象。您应该返回this
。
对somfunction做如下修改:-
$.fn.someFunc = function(tags, options) {
// Containing element
// $self = $(this);
// Note i have commented out the above line.
$self = this;
opts = $.extend({}, $.fn.someFunc.defaults, options);
// More code here
return $self;
}
我想这应该能解决问题。
- 我的jQuery插件参数没有正确启动,遇到了问题
- 我的jquery代码不起作用.为什么?
- 我的jquery中出现NaN错误
- 我如何才能找到哪些网站使用我的jQuery插件
- 如何使用我的Jquery代码创建委托事件侦听器
- 为什么我的jQuery点击函数没有触发
- 我的jQuery加载请求是否被调用了两次
- 为什么我的Jquery.ajax调用会触发错误事件
- 如何触发我的 jquery 表单提交
- 为什么我的jQuery .每次迭代都无法使用每个项目的属性
- 为什么我的jQuery UI对话框不起作用
- 在我的 jquery 函数中得到一个错误
- 我的jQuery UI对话框没有'如果前面没有警告,则不会打开
- 我的jquery在本地工作,但当它'it’s上传到我的网站上,它只起部分作用
- 我的jquery日历没有正确对齐
- 与我的jquery弹出窗口和自动调整文本区域大小有冲突
- 关于我的jQuery脚本+与iDevices的兼容性的建议
- 我的jquery方法没有'不起作用
- 我的jquery代码在谷歌chrome控制台中工作,而不是在保存它之后
- 为什么当我快速移动鼠标时,我的jQuery会崩溃