如何在if条件下放置一个正确的jQuery选择器,以便它适用于所有情况?

时间:2014-06-26 04:52:38

标签: jquery

使用Jquery每个函数,我正在解析一个名为myordersdiv

的div数据

在解析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
            });
        }
    });

有人可以帮忙吗?

4 个答案:

答案 0 :(得分: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);

Demo

答案 1 :(得分:0)

您当前的选择器只抓取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();

答案 2 :(得分:0)

试试这个

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);

Demo

OR

在jquery中使用map来获取数组中的所有标签值

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

    }).get();

console.log(labelValue);

答案 3 :(得分:0)

试试这个

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/