如何只获取HTML属性而不获取jQuery或其他插件设置的数据存储值

ej83mcc0  于 2023-03-22  发布在  jQuery
关注(0)|答案(3)|浏览(127)

我想通过jQuery使用.data()获取HTML数据属性。
我需要获取多个数据属性,所以我没有指定任何参数并缓存结果:
var data = $('myselecttor').data()
问题是.data()不仅获取HTML属性,还获取jQuery(供内部使用)或其他插件(在我的示例中是jQuery UI)设置的数据存储值。
我需要在一次调用中获取所有的HTML数据属性(不包括数据存储值)(不是单独的)
$.ajax中发送此data()会导致错误:
未捕获的类型错误:非法调用

var data = $('div').draggable().data();

console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js"></script>
<div data-name="jashawant" data-sex="male">Drag me</div>

**一个

hmmo2u0o

hmmo2u0o1#

您可以查看属性本身,但也可以使用元素的dataset

var data = $('div').draggable().get(0).dataset;

http://jsfiddle.net/DprgS/1/

ghhaqwfi

ghhaqwfi2#

你可以试试这个

(function($) {
    $.fn.getDataAttr = function() {
        var attributes = {}; 
        if( this.length ) {
            $.each( this[0].attributes, function( i, attr ) {
                if( attr.name.substr(0,5) =='data-' )
                    attributes[ attr.name ] = attr.value;
            } ); 
        }
        return attributes;
    };
})(jQuery);

使用

var data = $('div').draggable().getDataAttr();
console.log(data); // {data-name: "jashwant", data-sex: "male"}

DEMO.

tcbh2hod

tcbh2hod3#

更多选项:
为数据属性命名
<div id="mydiv" data-jashwant-name="jashwant" data-jashwant-sex="male">Drag me</div>
然后循环并只选择您的

for (var i in data) {
  if (i.indexOf('jashwant') > -1 ) { 
    console.log(i + " : " + data[i]);
  }
}

或者...不太可靠,但在这种情况下可能有效。只选择值为字符串的数据属性(忽略jquery UI对象)

for (var i in data) {
  if (typeof data[i] === "string" ) { 
    console.log(i + " : " + data[i]);
  }
}

相关问题