Multiple Select2 InitSelection Values

http://stackoverflow.com/questions/25707054/setting-value-in-select2-using-javascript-object-as-data-source

by odiseo

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/select2/3.5.0/select2.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/select2/3.5.0/select2.css">
<div id="publisher-selector-1"></div>
<div>
  <input id="publisher-selector-2" value="1,3,4" />
</div>

JavaScript

(function($) {
  selections = [{
    id: 1,
    text: 'Microsoft'
  }, {
    id: 2,
    text: 'Oracle'
  }, {
    id: 3,
    text: 'VMWare'
  }, {
    id: 4,
    text: 'IBM'
  }, {
    id: 5,
    text: 'Cisco'
  }];

  var extractPreselectedIds = function(element) {
    var preselectedIds = [];
    if (element.val())
      $(element.val().split(",")).each(function() {
        preselectedIds.push({
          id: this
        });
      });
    console.log("extractPreselectedIds");
    return preselectedIds;
  };

  var preselect = function(preselectedIds) {
    var preSelections = [];
    for (index in selections)
      for (id_index in preselectedIds)
        if (selections[index].id == preselectedIds[id_index].id)
          preSelections.push(selections[index]);
          
    console.log('preselect', preSelections);      
    return preSelections;
  };

  var filterOutSelected = function() {
    var selectedValues = $('#publisher-selector-2').val().split(",");
    var res = selections.filter(function(item) {
      return !selectedValues.find(function(selectedID) {
        return selectedID == item.id
      });
    });

    return res;
  };

  var adjustPlaceHolder = function() {
    //Setting place holder
    var totalSelections = ($("#publisher-selector-2").val() != "") ? $("#publisher-selector-2").val().split(",").length : 0;
    console.log("totalSelections", totalSelections);
    console.log("$(#publisher-selector-2).val()", $("#publisher-selector-2").val());

    var placeHolderText = (totalSelections > 0) ? totalSelections + " Publisher(s)" : "None";
    $("#publisher-selector-1").attr("data-placeholder", placeHolderText);
    $("#publisher-selector-1").data("select2").setPlaceholder();
  };

  $('#publisher-selector-1').select2({
    placeholder: 'None',
    minimumInputLength: 0,
    multiple: false,
    allowClear: true,
    data: function() {
      return {
        results: filterOutSelected()
      };
    },
    initSelection: function(element,...