Как извлечь указанные c значения из jQuery .fn.init () и jQuery .fn.init [prevObject: jQuery .fn.init ()] - PullRequest
1 голос
/ 22 января 2020

Я не нашел четкого способа сделать это, или конкретного c способа, поэтому я спрашиваю:

Прежде всего, это мой html:

<tr class="RateContainer" data-rate="{"id":"AD","meal":{"id":2,"abbreviation":"AD",
...
...

Я имею в виду; много информации внутри data-attribute. затем с помощью js я могу взять это:

var dataRate = $(".RateContainer").map(function () { return $(this).data('rate'); });

, которые возвращают этот объект:

jQuery.fn.init(278) [{…}, {…}, …]

Где первый элемент такой:

0:
id: "SA"
meal: {id: 1, abbreviation: "", name: "string"}
...
__proto__: Object

Первый вопрос : ¿как вывести "идентификаторы" из jQuery.fn.init(278) [{…}, {…}, …], чтобы сравнить их позже? Где я могу увидеть идентификатор (свойство, которое я хочу), используя это:

for (var datos in dataRate) {
            console.log(dataRate[datos].id);
        }

И дать мне список идентификаторов, например:

SA
 MP
 AD
 MP
...
and go on like 300

На данный момент, что я хочу, это это, у меня есть это:

var listaMeals = $("#HotelAvailSideFilterResult_listaMeals2").val();

Какие распечатать это, когда я выбираю значение и DropDowSelect (Select2):

(2) ["AD", "SA"]
0: "AD"
1: "SA"
length: 2

Таким образом, у меня есть массив, где я слушаю, когда я выбираю 1 пункт, и они сохраняют выбранные значения. Так что я хочу сделать так, чтобы значения выбирались следующим образом:

(3) ["AD", "SA", "TI"] 
0: "AD" 
1: "SA" 
2: "TI"

Сделать каждый объект скрытым, чтобы его значение данных не содержало / не содержало идентификатор, примерно так:

var visible = true;
 if (listaMeals && null != listaMeals && !$.isEmptyObject(listaMeals) && visible) {
                    var existeFiltro = false;

                    $(listaMeals).each(function (i) {
                        if (listaMeals[i].includes(listaMeals_Search)) {
                            existeFiltro = true
                            console.log('encontrado')
                            //- 1 < listaMeals_Search.find(listaMeals[i])
                        }
                        console.log(' no encontrado')
                    });

                    if (!existeFiltro) {
                        visible = false;
                    }
 if (!existeFiltro) {
                        visible = false;
                    }

                if (visible) {
                    $(hotelActual).show();
                } else {
                    $(hotelActual).hide();
                }

Итак Второй вопрос : Как я могу сравнить выбранные значения, которые уже находятся в массиве, со свойством id атрибута data, который находится в tr внутри большого числа элементов и обертки, отдел Теперь я не использую атрибуты данных, я использую это:

 $(".product-content.product-wrap.clearfix.product-deatil", divGeneralHoteles).each(function () {
                var hotelActual = $(this);
                var listaMeals_Search = $(this).html().toString();

1 Ответ

1 голос
/ 22 января 2020

Похоже, это то, что вы пытаетесь сделать:

$(".RateContainer").each(function(){ // Each loop will iterate for each element
   var rate = $(this).attr("data-rate")); // This value is in JSON (a string)
   rate = JSON.parse(rate); // This is a JS object.
});

Если вы хотите обработать все значения одновременно, вы можете поместить каждую ставку в массив.

Для форматирования массива используется метод jQuery map (https://api.jquery.com/jQuery.map/):

$.map(arrayToFormat, formattingFunction);

Добавление : Ваше значение data-rate в HTML не правильно написано. Вы должны написать следующее:

data-rate='{"id":"AD","meal":{"id":2,"abbreviation":"AD"}}'

В противном случае ваша строка будет начинаться и заканчиваться на каждом ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...