如何在 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)));
});
试一试:
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>
我正在使用所选的插件 (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)));
});
试一试:
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>