Проверьте, существуют ли параметры (исходящие из объекта Json) в раскрывающемся списке выбора

Два сценария: приведенные ниже два случая не выполняются одновременно. У меня есть раскрывающийся список с существующими параметрами, что мне нужно сделать, это

  1. Добавьте атрибут «selected» к опции, которая соответствует ключу из объекта. Мне не нужен здесь множественный выбор, я не знал, как объяснить здесь мой фактический сценарий, поэтому я использовал «Бэтмен» в условии if if (jQuery(this).val() == «Бэтмен»), в мой сценарий бэтмен динамичен.

  2. Если ключи не совпадают и не существуют в DOM (выберите), добавьте этот ключ в качестве опции и добавьте атрибут «выбрано».

Я почти закончил, но не смог найти решение, не заменив все значения в раскрывающемся списке (пожалуйста, запустите фрагмент). Я также пробовал добавить опцию, но не мог понять это правильно.

var obj = {"characters": [{"Hulk": "Hulk"}]};
var opt;
$.each(obj["characters"], function(index, value) {
  $.each(value, function(val) {
    $('.sel-dropdwn').each(function() {
      if ($(this).find('option').val() == val)
        $(this).find('option').attr('selected', 'selected');
      else{
       opt = $('<option></option>');
       opt.text(val).val(val).attr('selected','selected');
       $(this).append(opt)
      }  
    });
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select aria-required = "true" class = "form-control sel-dropdwn">
  <option value = "">-- None --</option>
  <option value = "Superman">Superman</option>
  <option value = "Batman">Batman</option>
  <option value = "Ironman">Ironman</option>
</select>

В элементе select только один параметр может быть selected в любой момент времени, если вы не добавите атрибут multiple (которого нет в вашем HTML).

connexo 30.05.2019 00:28

Я переписал свой вопрос, потому что мне может быть непонятно, мне нужно включить два сценария: 1. если ключ от объекта существует в раскрывающемся списке, добавьте атрибут выбора 2. Если ключ не существует, добавьте/добавьте его к выпадающий список. В этом случае добавьте «Халк» в раскрывающийся список и сделайте его выбранным.

v k 30.05.2019 00:35

Нет необходимости «добавлять выбранный атрибут к опции». $('выбрать').val(значение); сделает это за вас. Вам просто нужно посмотреть, существует ли значение, которое у вас уже есть, в выборе или нет. В конце, после добавления новой опции (при необходимости) просто установите val() в качестве значения.

Nawed Khan 30.05.2019 00:36
Несколько объектов из вашего JSON имеют вариант сопоставления. До сих пор неясно, каков желаемый результат.
connexo 30.05.2019 00:37

@connexo прав. Основываясь на вашем примере, я понимаю, что вы хотите добавить Халка, потому что его еще нет в опциях. что, если не хватает более одного варианта? С другой стороны... если Халк уже был в опциях... какую из них вы выберете? если вы говорите "халк".. тогда почему?

Nawed Khan 30.05.2019 00:40

@connexo, пример, который я взял, был плохим, в реальном сценарии, с которым я столкнулся, совпадет только один вариант, мне нужно проверить, существует ли он или нет, если нет, добавить и выбрать его. Если опция уже существует, добавьте к ней выбранное.

v k 30.05.2019 00:42

@NawedKhan Я не мог правильно понять фрагмент, потому что это очень сложно объяснить здесь. Здесь будет только один вариант, который будет совпадать.

v k 30.05.2019 00:48

Затем настройте свой код, чтобы он соответствовал вашему сценарию. После всех ваших объяснений непонятно еще. Вы имели в виду, что получаете только один объект в своем JSON? Если нет, то как вы справляетесь с более чем одним несовпадающим объектом? Все ли они добавляются, и если да, то какой из них вы хотите выбрать?

connexo 30.05.2019 00:50

Таким образом, это означает, что вы проверяете одно значение, а не список элементов. У вас есть «Халк» под рукой, и вы хотите выбрать Халка, если он существует в списке опций, или (если не существует) добавить и выбрать его.

Nawed Khan 30.05.2019 00:50

@NawedKhan да, пожалуйста, объясните мне, как это сделать, это может быть ближе всего к моему делу, что может дать мне преимущество

v k 30.05.2019 01:00

@connexo Прошу прощения за всю эту путаницу, да, он будет получать по одному объекту из json за раз. Сейчас попробую код подправить.

v k 30.05.2019 01:01
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
2
11
226
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основываясь на комментарии и пояснении OP, мы понимаем, что хотим выбрать или добавить и выбрать заданное значение.

let character = 'Hulk';
let exists = $('.sel-dropdwn option[value = "'+ character + '"]').length > 0;

if (!exists){
   let option = $('<option value = "'+ character + '"></option>').text(character);
   $('.sel-dropdwn').append(option);
}
$('.sel-dropdwn').val(character);

Здесь я использую одно значение для символа. У вас может быть объект с ключом/значением.

Другие вопросы по теме