如果没有找到结果,则Jquery each()回退

时间:2010-12-28 14:54:21

标签: jquery

我正在尝试在表单提交上创建一个JSON对象以传递给Perl。 我有几个嵌套div,其中ulli s允许jQuery-ui可排序排序。

为了能够保存已排序的li(分布在几个div上),我编写了以下代码:

jQuery("form[name='editorview']").submit(function(event) {
    event.preventDefault();
    var values = '{ ';
    jQuery(this).find(".div_abcd").each(function(){
        values += '"'+this.id+'": [';
        jQuery(this).find("div[id^='CONT']").each(function(){
            values += '{"'+this.id+'": [';
            jQuery(this).find("li").each(function(){
                if (jQuery(this).not("class='placeholder'")){
                    values += '"'+this.id+'",';
                } else {
                    values +='"placeholder",';
                }
            });
            values = values.slice(0, -1); //removing trailing ,
            values +=']},';
        });
        values = values.slice(0, -1); //removing trailing ,
        values += '],';
    });
    values = values.slice(0, -1); //removing trailing ,
    values += '}';
    jQuery("#order").val(values);
    document.editorview.submit();
});

div最多有4 div_abcd个,但它们不一定包含其他div个。在这种情况下,我遇到第二个values = values.slice(0, -1);从第5行删除开头[的问题。

如果else与任何内容不匹配,有没有办法jQuery(this).find("div[id^='CONT']").each(function(){。我尝试使用.not(),但它没有用。

修改

即使我的问题已经解决,我仍然想知道是否有可能知道每个()都没有经历过一次。

第二次编辑:

现在一切都清楚了。感谢。

2 个答案:

答案 0 :(得分:5)

我敢打赌,有一个比循环更好的方法,但是一开始:不要手动构建字符串!

var values = {};
jQuery(".div_abcd", this).each(function(){
    var a = values[this.id] = [];
    jQuery("div[id^='CONT']", this).each(function(){
        var obj = {};
        obj[this.id] = jQuery("li", this).map(function() {
            if (jQuery(this).is(".placeholder")){
                return "placeholder";                  
            }
            return this.id;
        }).get();
        a.push(obj);
    });
});
values = JSON.stringify(values);

更新:您还必须使用is()代替not()

参考: mapgetJSON

选中DEMO

更新以回答您的问题:

您始终可以使用length检查选择的元素数量:

var $elements = jQuery(this).find("div[id^='CONT']");
if($elements.length > 0) {
    $elements.each(...);
}
else {
    // something else
}

答案 1 :(得分:1)

您可以将结果输入变量并检查结果的长度。如果它不是空的,你可以进行循环,否则你可以跳过修剪。