从 data 属性解析 $.extend 配置
我知道我可以使用 $.data 但如何迭代所有 data-
属性并将这些值与默认插件配置合并?
(function($){
$.fn.plugin = function(opts){
opts = $.extend({
foo: 'abc',
boo: 45
}, opts);
return this.each(function(){
...
});
};
})(jQuery);
因此,如果我使用
$('.el').plugin();
它应该在 .el
上查找数据属性,例如 data-foo 等...
I know I can use $.data but how can I iterate trough all data-
attributes and merge the values with the default plugin configuration?
(function($){
$.fn.plugin = function(opts){
opts = $.extend({
foo: 'abc',
boo: 45
}, opts);
return this.each(function(){
...
});
};
})(jQuery);
So if I use
$('.el').plugin();
it should look for data attributes on .el
, like data-foo etc ...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在
each()
循环中,您可以合并 data() 与默认值,然后在一次调用 $.extend():这应该达到你的目的Want:
opts
参数具有最高优先级,其次是当前元素的data-
属性,最后是插件默认值。In your
each()
loop, you can merge the object returned by data() with your defaults, then merge theopts
argument with the result in a single call to $.extend():This should achieve what you want: the
opts
argument has the highest priority, followed by thedata-
attributes of the current element, followed by the plugin defaults..data() 方法支持 data- 属性。
在不指定参数的情况下调用它将返回一个包含所有数据属性的键/值对的对象:
The .data() method supports data- attributes.
Calling it without speciying a parameter will return an object with key/values pairs for all the data attributes:
您可以像这样获取元素的所有属性:
这是一个演示: http://jsfiddle.net/ ksbD3/1/
另外,我从这个答案中得到了上面的大部分代码:使用 Javascript/jQuery 从 HTML 元素获取所有属性
You can get all the attributes for an element like this:
Here is a demo: http://jsfiddle.net/ksbD3/1/
Also I got most of the above code from this answer: Get all Attributes from a HTML element with Javascript/jQuery
您可以在 jQuery 对象上使用
data()
方法,该方法将以键/值对的形式提供所有数据属性。试试这个。.data()
参考:http://api.jquery.com/data/< /a>You can use
data()
method on the jQuery object which will give all the data attributes as key/value pair. Try this..data()
reference: http://api.jquery.com/data/感谢您指出使用 opts = $.extend(this.data(), opts); 的所有答案
这里需要补充一个重要事实:HTML 数据属性的转换。
data-coolNname 可以这样访问 this.data(coolname)
data-another-cool-n ame 可以像这样访问 this.data(anotherCoolName)
详细信息:jQuery 是否在内部将 HTML5 数据属性键转换为小写?
如果您不了解,java 的大小写敏感和属性名称的转换可能会是一个陷阱。
Thank you for all the answers that pointing out using opts = $.extend(this.data(), opts);
One important fact need to be added here: is the transformation of HTML data-attribute.
data-coolName can be accessed like this this.data(coolname)
data-another-cool-name can be accessed like this this.data(anotherCoolName)
Details: Does jQuery internally convert HTML5 data attribute keys to lowercase?
Case sensitive of java and the transformation of the attribute name might be a pitfall if you don't know about.