【问题标题】:Jquery. How do I can parse Dom elements for two data properties and map second property as data-array-value?查询。如何解析两个数据属性的 Dom 元素并将第二个属性映射为数据数组值?
【发布时间】:2018-02-04 19:42:51
【问题描述】:

我有一个包含两个数据属性的元素集合:data-id 和 data-parent。它们通常通过 data-id 或 data-parent 相互重复。我需要将所有 data-parent 属性映射到具有相同 data-id 的第一个元素并删除其他元素。

对于单个 data-id 元素,我有一个工作示例,但是如何将它拉伸到整个集合并使其工作 - 我不知道(希望有人可以帮助我。

我对相同的 data-id 元素使用了什么:

var parents = [];
$('.brand-li[data-id="117"]').each(function(){
   if( parents.indexOf($(this).attr('data-parent')) === -1 ) {
        parents.push( $(this).attr('data-parent') );
        }
        $(this).data('parent', parents);
});

此外,尽管浏览器在此脚本之后登录到控制台的数据正确,但 data-id="117" 的 DOM 元素仍然具有旧的 data-parent 值。大概,我做错了什么? 提前致谢。

【问题讨论】:

  • 请点击<> 并发布minimal reproducible example,并明确说明实际结果与预期结果。不清楚你的需求是什么
  • 使用二维数组,第一维是ID,第二维是父级。
  • 现在看来你想要$('.brand-li[data-id]').each(function(){ if (this.getAttribute("data-id") === this.getAttribute("data-parent")) this.removeAttribute("data-parent"); })
  • 希望这次编辑澄清了我的需要。
  • @Barmar,你能提供像 {id: parent, parent, parent}, {id: parent, parent, parent} 这样的二维数组的例子吗?我已经尝试搜索如何制作它,但不明白

标签: javascript jquery custom-data-attribute dom-manipulation


【解决方案1】:

使用二维对象集合,ID 和父对象作为键。

void ids_and_parents = {};
$(".brand-li[data-id][data-parent]").each(function() {
    var id = $(this).data("id");
    var parent= $(this)>data("parent");
    if (!ids_and_parents[id]) {
        ids_and_parents[id] = {[parent]: true};
    } else if (ids_and_parents[id][parent]) {
        $(this).remove();
    } else {
        ids_and_parents[id][parent] = true;
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-26
    • 2020-03-20
    • 2017-04-23
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多