【问题标题】:Using jQuery to dynamically create checkboxes based on multiple attributes from div使用 jQuery 根据来自 div 的多个属性动态创建复选框
【发布时间】:2013-09-01 08:24:03
【问题描述】:

我希望 jQuery 根据 div 中存在的类/数据动态创建复选框列表。本质上,这些复选框将过滤产品,以便单击复选框将在其 div 中显示包含该标签的产品,同时避免任何重复的复选框。

示例:

<div class="Shoes" data-size="Small" data-color="Black">
     <h3>Nike</h3>
</div>
<div class="Belts" data-size="Medium" data-color="Black">
     <h3>Belt</h3>
</div>
<div class="Shirt" data-size="Large" data-color="Blue">
     <h3>Polo</h3>
</div>
<div class="Socks" data-size="Small" data-color="White">
     <h3>Generic Socks</h3>
</div>

预期输出 班级类型

  • 鞋子
  • 腰带
  • 衬衫
  • 袜子

尺寸

  • 中等

颜色

  • 黑色
  • 白色
  • 蓝色

每个复选框都需要能够隐藏/显示项目。

JsFIDDLE

到目前为止,我的代码来自搜索/以前的答案,但它只创建 1 个用于“类”的复选框类型,而不是创建多个。

【问题讨论】:

  • 在我们花时间帮助你之后,你突然改变了你的问题 :)
  • 你最初要求有一个复选框,现在你想要一个包含所有检索数据的下拉列表,对吗?
  • 抱歉,我不小心输入了 dropbox 而不是 checkbox。
  • 仍然...您在过去半小时内多次编辑了该问题。我也试图帮助你......但现在不是......
  • @2pha 我也失去了对这个 Q 的灵感

标签: javascript jquery html checkbox


【解决方案1】:

试试

jQuery(function ($) {

    function createCheckboxes($els, attr) {
        var props = {};
        $els.each(function () {
            props[$(this).attr(attr)] = true;
        });

        return $.map(props, function (val, key) {
            var $chk = $('<input />', {
                type: 'checkbox',
                value: key
            })
            return $('<label />', {
                text: key
            }).append($chk)
        })
    }

    $('span').append(createCheckboxes($('div'), 'class'))
    $('span').append(createCheckboxes($('div'), 'data-size'))
    $('span').append(createCheckboxes($('div'), 'data-color'))
});

演示:Fiddle

【讨论】:

    【解决方案2】:

    试试这个http://jsfiddle.net/LzmTA/1/

    HTML

    <div class="Shoes" data-size="Small" data-color="Black">
         <h3>Nike</h3>
    
    </div>
    <div class="Belts" data-size="Medium" data-color="Black">
         <h3>Belt</h3>
    
    </div>
    <div class="Shirt" data-size="Large" data-color="Blue">
         <h3>Polo</h3>
    
    </div>
    <div class="Socks" data-size="Small" data-color="White">
         <h3>Generic Socks</h3>
    
    </div>
    

    Javascript

    $(document).ready(function(){
        var goods = {};
        var divs  = $('div');
    
        for(var i = 0; i < divs.length; i++){
            var attributes = divs[i].attributes;
            var item = {};
            for(var j = 0; j < attributes.length; j++){
                var attrName = attributes[j].name;
                if(!goods[attrName]){
                    goods[attrName] = {};
                }
                goods[attrName][attributes[j].value] = 1;
            }
        }
    
        printAttributes(goods);
    
        console.log(goods);
    });
    
    function printAttributes(goods){
        for(var group in goods){
            var groupTitle = $('<h3>').text(group);
            $('span').append(groupTitle);
            for(var item in goods[group]){
                console.log(item);
                var sp  = $('<label>').text(item);
                var chk = $('<input>').attr('type', 'checkbox').attr('value', item).attr('attr', group);
                chk.bind('change', function(){
                    filterGoods();
                });
                $('span').append(chk).append(sp);
            }
        }
    }
    
    function filterGoods(){
        var separator = '|';
        var chks   = $('input[type=checkbox]:checked');
        var filter = [];
    
        //get filter
        for(var i = 0; i < chks.length; i++){
            var item = $(chks[i]).attr('attr') + separator + $(chks[i]).val();
            filter.push(item);
        }
    
        //do filter
        var hasAttr = false;
        var divs    = $('div');
        for(var i = 0; i < divs.length; i++){
            hasAttr = false;
            for(var j = 0; j < filter.length; j++){
                var filterParts = filter[j].split(separator);
                if($(divs[i]).attr(filterParts[0]) == filterParts[1]){
                    hasAttr = true;
                    continue;
                }
            }
    
            hasAttr ? $(divs[i]).show() : $(divs[i]).hide();        
        }
    
        console.log(filter);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 2013-07-22
      相关资源
      最近更新 更多