Get custom data-attribute in select2 with <select>

血红的双手。 提交于 2019-11-27 15:47:25

问题


Let's assume you have the following HTML5

<select id="example">
    <option value="AA" data-id="143">AA</option>
    <option value="BB" data-id="344">BB</option>
</select>

$("#example").select2();

How do I get the data-id from the selected option ?


回答1:


There is no direct method with select2, you can use a combinaison of select2 data and jQuery :

$("#example").select2().find(":selected").data("id");

First you get the select2 data then you find your selected option with jQuery and finally the data-attribute.




回答2:


Select2 v4 relies on <select> tags instead of hidden <input> tags so it's now easier to get the selected option or options: you just refer to the original <select>. This may have also been the case with Select2 v3 but I've only used Select2 v4.

$('#example option:selected').attr('data-id')

jsfiddle demonstration

See also Get selected value in dropdown list using JavaScript?

Edit: I like this answer for general purpose data object access:

var d = $("#dropdown").select2("data");

d will be an array containing the selected item(s) as objects, so to access the id property of the first item:

var id = d[0].id;



回答3:


$(document).ready(function() {
    $('select#myselect').select2({
        templateResult: formatOutput
    });

});
function formatOutput (item) {
    var $state = $(item.element).data('id') + ' ' + item.text;
    return $state;
};



回答4:


After hours of trying to solve this, I have manage to pull out the attribute. I am using 3.5.4

$("#select2").select2('data').element[0].attributes[1].nodeValue

HTML

<select id="select2" name="course" class="form-control">
  <option></option>  
  <optgroup label="Alabama">  
    <option value="City 1" data-url="/alabama/city-1">City 1</option>  
    <option value="City 2" data-url="/alabama/city-2">City 2</option>  
  </optgroup>  
</select>

$("#select2").select2('data').element[0].attributes[0].nodeValue --> Value Attribute
$("#select2").select2('data').element[0].attributes[1].nodeValue --> Data-URl Attribute



回答5:


My contribution on how to get value of data-attibute of selected option using Select2 event (3.5) (thx to @loreto g's answer):

<select id="myselect">
    <option value="foo" data-type="bar" data-options='baz'></option>
</select>

<script>
var myselect = $('#myselect').select2();

myselect.on('select2-selecting', function(sel){

    var seltype = sel.choice.element[0].attributes['data-type'].value,
        seloptions = sel.choice.element[0].attributes['data-options'].value;

});
</script>

Hope this helps




回答6:


we can simply do this like:

$(this).find(":selected").data("id")



回答7:


so simple, using jquery api [tested against select2 4.x version]

$('#select').on('select2:select', function (e) {
    let id = $(e.params.data.element).data('id');
});



回答8:


I use select2 to load all of my options dynamically (from an array), and this is what I have been able to use successfully:

$('#element').select2('data')[0].dataAttribute;

where the id of the select is 'element', and dataAttribute is the custom attribute for the option i'm trying to retrieve.



来源:https://stackoverflow.com/questions/22261209/get-custom-data-attribute-in-select2-with-select

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!