Как поставить правильный селектор jQuery в условие if, чтобы он работал во всех случаях?

#jquery

#jquery

Вопрос:

Используя Jquery для каждой функции, я анализирую данные div, вызываемые как myordersdiv

При разборе myordersdiv я создаю массив и сохраняю данные.

Проблема, с которой я сталкиваюсь, заключается в том, что

Если myordersdiv у него есть один elmenet, то он работает нормально, а o / p равен

 [{"name":"Choclate"}] 
  

Но в случае myordersdiv , если под ним есть два elmenet , тогда o / p равен

[{"name":"ChocolateVanila "}] (Он смешивает их оба)

Скрипка для первого случая

http://jsfiddle.net/GStDU/3/

Скрипка для второго случая

http://jsfiddle.net/GStDU/5/

Правильно, селектор jQuery

 $.each($('#myordersdiv > ul'), function(i, elem) {
        name = $(elem).find("label").text();
        if (name != 'undefined') {
            //Creating product array 
            products.push({
                'name': name
            });
        }
    });
  

Кто-нибудь может помочь??

Ответ №1:

попробуйте это:-

 var name;
var products = [];
$('#myordersdiv > ul').find('ul').each(function(){
    name = $(this).find("label").text();
    if (name != 'undefined') {
        //Creating product array 
        products.push({
            'name': name
        });
    }
 });

 var orderjson = JSON.stringify(products);
 console.log(orderjson);
  

ДЕМОНСТРАЦИЯ

Ответ №2:

Ваш текущий селектор захватывает только непосредственный ul дочерний элемент #myordersdiv , и это переносит все элементы вашего списка. Таким образом, в $.each функции он получит весь текст меток и объединит их. Есть несколько способов исправить селекторы, в том числе следующие:

  $.each($('.prd-items-detials > ul'), function(i, elem) {
    name = $(elem).find("label").text();

 $.each($('#myordersdiv label'), function(i, elem) {
    name = $(elem).text();
  

Ответ №3:

попробуйте это

 var name;
var products = [];

     $.each($('#myordersdiv > ul'), function(i, elem) {
            $(elem).find("label").each(function(i, elem) {
            var name=$(this).text();
                if (name != 'undefined') {
                //Creating product array 
                products.push({
                    'name': name
                });
            }
            });
        });
        var orderjson = JSON.stringify(products);
        console.log(orderjson);
  

ДЕМОНСТРАЦИЯ

или

используйте map в jquery, чтобы получить все значения метки в массиве

  var labelValue = $('#myordersdiv ul li label').map(function (i, elem) {
        return $(this).text();

    }).get();

console.log(labelValue);
  

Комментарии:

1. Спасибо, но у меня есть несколько элементов для отправки в json, а не только имя, для демонстрации я это показал . name = $(elem).find(«label»).text(); image = $(elem).find(‘img’).attr(‘src’); quantity = parseInt($(elem).find(«i.qt»).text()); цена = $(elem).find(«div.total»).text(); начинки = [];

Ответ №4:

попробуйте это

 var name;
var products = [];

$('input[type="checkbox"]').click(function () {
    name = $(this).parent('form').find("label").text();
    if ($(this).is(':checked')) {
        products.push({
            'name': name
        });
    } else {
        var index = products.indexOf(name);
        products.splice(index, 1);
    }
    var orderjson = JSON.stringify(products);
    console.log(orderjson);
});
  

скрипка:
http://jsfiddle.net/GStDU/9 /