javascript - 我需要获取所有数据属性和值,例如键 :value pair of a ul li

标签 javascript jquery

我有一个 ul 标记,其中有几个 li 元素。每个li都有一些数据属性。

<ul id="elements">
<li id="mtq" data-id="1" data-name="abc">test 1</li>
<li data-id="2">test 2</li>
<li data-id="3" data-name="xyz">test 3</li>
<li data-id="4" data-name="pqr">test 4</li>
<li data-id="5" data-type="text">test 5</li>
<li data-id="7">test 6</li>
</ul>

我需要获取每个 li 的所有数据属性(不带 date- 字符串)和值,例如 key:value,如下所示。

{"id":1,"name":"abc"}

我尝试了下面的 JavaScript 代码,但出现错误,提示 Array.prototype.forEach 在 null 或未定义时调用

function getDataAttributes(el) {
    var data = {};
    [].forEach.call(el.attributes, function(attr) {
        if (/^data-/.test(attr.name)) {
            var camelCaseName = attr.name.substr(5).replace(/-(.)/g, function ($0, $1) {
                return $1.toUpperCase();
            });
            data[camelCaseName] = attr.value;
        }
    });
    return data;
}

$("#hello").click( function (e) {

    $("ul#elements li").each(function() {
    var data = getDataAttributes($(this));
    console.log(data);
    //var json = JSON.stringify(data, null, 2);
    //el.appendChild(document.createTextNode(json));
    });

});

这是我的jsfiddle。 https://jsfiddle.net/a4vya9m4/26/

当我通过 ID 选择一个 li 时,它会给出答案。我的脚本有什么问题?

最佳答案

您对getDataAttributes想得太多了,您可以在您的el中获取数据集,其中已经有您需要的内容。

function getDataAttributes(el) {
    if(el[0] && el[0].dataset) {
        return Object.assign({}, el[0].dataset);
    }
    return {};
}

el[0].dataset将返回一个DOMStringMap,这就是为什么我使用Object.assing将其转换为普通对象。

希望这对您有帮助。

关于javascript - 我需要获取所有数据属性和值,例如键 :value pair of a ul li,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48963677/

相关文章:

javascript - jquery datetimepicker 设置为日期取决于日期

jQuery : Scroll To - Change the div ID

javascript - 使用循环,但仅添加一个元素

javascript - 我在让我的 js 和 css 文件的 src 标签工作时遇到问题

jquery - 获取上面的元素id

jquery - 平板电脑版本的 Bootstrap 菜单导航中断

jquery - 使用 JQuery 获取维基百科信息框内容

javascript - 如何在输入文本时进行 ajax 调用并返回结果

javascript - 为什么这个子字符串在中文中不起作用?

javascript - 从 2 个数组创建一个字典( MAP )