从 data 属性解析 $.extend 配置

发布于 2024-12-31 23:02:33 字数 405 浏览 0 评论 0原文

我知道我可以使用 $.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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

星星的轨迹 2025-01-07 23:02:33

each() 循环中,您可以合并 data() 与默认值,然后在一次调用 $.extend()

$.fn.plugin = function(opts) {
    return this.each(function() {        
        var thisOpts = $.extend({
            foo: "abc",
            boo: 45
        }, $(this).data(), opts);
        // Now use 'thisOpts' as operating parameters for this element...
    });
};

这应该达到你的目的Want:opts 参数具有最高优先级,其次是当前元素的 data- 属性,最后是插件默认值。

In your each() loop, you can merge the object returned by data() with your defaults, then merge the opts argument with the result in a single call to $.extend():

$.fn.plugin = function(opts) {
    return this.each(function() {        
        var thisOpts = $.extend({
            foo: "abc",
            boo: 45
        }, $(this).data(), opts);
        // Now use 'thisOpts' as operating parameters for this element...
    });
};

This should achieve what you want: the opts argument has the highest priority, followed by the data- attributes of the current element, followed by the plugin defaults.

自由范儿 2025-01-07 23:02:33

.data() 方法支持 data- 属性。

从 jQuery 1.4.3 开始,HTML 5 数据属性将自动
拉入 jQuery 的数据对象。属性的处理方式为
嵌入的破折号在 jQuery 1.6 中进行了更改,以符合 W3C HTML5
规格。

在不指定参数的情况下调用它将返回一个包含所有数据属性的键/值对的对象:

var mydata = $("#mydiv").data();

The .data() method supports data- attributes.

As of jQuery 1.4.3 HTML 5 data- attributes will be automatically
pulled in to jQuery's data object. The treatment of attributes with
embedded dashes was changed in jQuery 1.6 to conform to the W3C HTML5
specification.

Calling it without speciying a parameter will return an object with key/values pairs for all the data attributes:

var mydata = $("#mydiv").data();
薯片软お妹 2025-01-07 23:02:33

您可以像这样获取元素的所有属性:

//get the element and setup an array for output
var el  = document.getElementById("o"),
    arr = [];

//loop through each attribute for the element
for (var i = 0, attrs = el.attributes, l=attrs.length; i < l; i++){

    //if the current attribute starts with `data-` then add it to the array
    if (attrs.item(i).nodeName.substr(0, 5) == 'data-') {
        arr.push(attrs.item(i).nodeName);
    }
}

这是一个演示: http://jsfiddle.net/ ksbD3/1/

另外,我从这个答案中得到了上面的大部分代码:使用 Javascript/jQuery 从 HTML 元素获取所有属性

You can get all the attributes for an element like this:

//get the element and setup an array for output
var el  = document.getElementById("o"),
    arr = [];

//loop through each attribute for the element
for (var i = 0, attrs = el.attributes, l=attrs.length; i < l; i++){

    //if the current attribute starts with `data-` then add it to the array
    if (attrs.item(i).nodeName.substr(0, 5) == 'data-') {
        arr.push(attrs.item(i).nodeName);
    }
}

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

灼痛 2025-01-07 23:02:33

您可以在 jQuery 对象上使用 data() 方法,该方法将以键/值对的形式提供所有数据属性。试试这个。

(function($){

  $.fn.plugin = function(opts){  

    //this.data() will give { foo: 'abc', boo: 45 ... }
    opts = $.extend(this.data(), opts);

    return this.each(function(){        
          ...
    });

  };
})(jQuery);

.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.

(function($){

  $.fn.plugin = function(opts){  

    //this.data() will give { foo: 'abc', boo: 45 ... }
    opts = $.extend(this.data(), opts);

    return this.each(function(){        
          ...
    });

  };
})(jQuery);

.data() reference: http://api.jquery.com/data/

萌逼全场 2025-01-07 23:02:33

感谢您指出使用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文