代码之家  ›  专栏  ›  技术社区  ›  Walker Farrow

如何在选择选项中获取数据属性和值作为对象(使用所选插件)

  •  5
  • Walker Farrow  · 技术社区  · 9 年前

    我正在使用所选插件( here )我有一个多重选择,我想在那里得到作为对象返回的值。

    代码如下:

    <select class="chozen" id="entities" multiple>
    
       <option data-name="Joe Blow" data-id="3" data-age="27">Joe Blow</option>
       <option data-name="Trish Thompson" data-id="4" data-age="21">Trish Thompson </option>
       <option data-name="Sam Jones" data-id="5" data-age="43">Sam Jones</option>
    
    </select>
    

    然后我有一个按钮来获取此输入的选定值,如下所示:

    var vals=$(“#实体”).val();

    它返回innerHTML选定值的数组,如下所示:

    ["Joe Blow","Trish Thompson","Sam Jones"]
    

    (注意:如果我设置了“value”属性,它将以数组而不是innerHTML的形式返回值)

    我要做的是获取数据属性并将其放入对象数组中,如下所示:

    [
       {name:"Joe Blow",id:"3",age:"27"} ,
       ....
    ]
    

    有人有什么建议吗。。。。

    我在chozen文档中找不到任何东西。

    4 回复  |  直到 9 年前
        1
  •  6
  •   Andre Calil    9 年前

    试试看:

    jQuery.fn.extend({
            selectedAsJSON: function(){
                var result = [];
                $('option:selected', this).each(function(){
                    result.push($(this).data());
                })
                return result;
            }
        });
    

    用法:

    $('#entities').selectedAsJSON();
    

    输出将是一个对象数组,其中每个 data- 将成为财产。

    更新: 重要的是要注意,这将与任何常规 select 元素,而不仅仅是 被选中的 。此外,您的 option 可能有任何 数据- attr也会起作用。

        2
  •  2
  •   ahmet2106    9 年前

    使用 $.val() 您只能获得input/select的值,请使用 :selected 选择器以获取整个元素。我的工作样本:

    https://jsfiddle.net/rj8j5v0j/

    您必须实现的代码:

    // build an array
    var data = [];
    $("#entities option:selected").map(function(){
        // push each selected option as an object with name, id and age
        data.push({
            name: $(this).data('name'),
            id: $(this).data('id'),
            age: $(this).data('age')
        });
    });
    
        3
  •  2
  •   showdev    8 年前

    这对我有用:

    $(document).on( 'change' , ‘.myselect’ , function() {
        console.log( $('.myselect option:selected').data(‘value’) );
    });
    

    基本上,我在原文中得到了所选的选项 <select> ,然后我得到了该元素的数据属性。Chosen为您提供了 <选择> ,因此必须通过查询选择器两次来获取原始引用。

    $('select').chosen();
    
    $(document).on('change', '#mySelect', function(e) {
      var r = $('#mySelect option:selected').data('customF');
      $("#result").html(r);
    });
    <link href="//cdnjs.cloudflare.com/ajax/libs/chosen/1.6.1/chosen.min.css" rel="stylesheet" />
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/chosen/1.6.1/chosen.jquery.js"></script>
    
    <div class="col-md-12">
      <select class="form-control" id="mySelect">
        <option value="value1" data-custom-f="Cool">Option 1</option>
        <option value="value2" data-custom-f="Awesome">Option 2</option>
      </select>
      <div id="result"></div>
    </div>

    View on JSFiddle

        4
  •  0
  •   LJ Wadowski    9 年前

    我在插件文档中也看不到任何内容,但您可以使用小型jQuery函数来实现所需的功能:

    function returnSelectAsArray($object){    
        var dataArray = [],
            $selectedOptions = $object.find('option').filter(':selected'),
            $option;
    
        $selectedOptions.each(function(){        
            $option = $(this);
            dataArray.push({
                name: $option.attr('data-name'),
                id: $option.attr('data-id'),
                age: $option.attr('data-age'),
            });
        });
        return dataArray;
    }
    
    $('#entities').on('change chosen:change', function(){    
        console.log(returnSelectAsArray($(this)));
    });
    

    JSFiddle