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

How to get data attributes and values as object in select options (using chosen plugin)

我正在使用所选的插件 (here),并且我有多个 select,我想在其中获取值 returned 作为对象。

代码如下:

<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>

然后我有一个按钮来获取此输入的 selected 值:

var vals = $("#entities").val();

它 return 是一个 innerHTML 数组 selected 值为:

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

(注意:如果我设置 "value" 属性,它将 return 值作为数组而不是 innerHTML)

我想做的是获取数据属性并将其放入对象数组中:

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

有人有什么建议吗? ....

我在 chozen 文档中找不到任何内容。

使用$.val() you'll only get the values of an input / select, try out by using the :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')
    });
});

我也没有在插件文档中看到任何内容,但您可以使用小 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

试一试:

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

用法:

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

输出将是一个对象数组,其中每个 data- 将是一个 属性。

更新: 重要的是要注意这将适用于任何常规 select 元素,而不仅仅是 chosen。此外,您的 option 可能具有任何 data- 属性,也可以正常工作。

这对我有用:

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

基本上,我得到了原来<select>中的selected选项,然后我得到了那个元素的data-attribute。 Chosen 为您提供了 <select> 的克隆版本,因此您必须通过两次查询选择器来获取原始引用。

$('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