jquery
2010-12-28 16 views 2 likes 
2

私は、フォーム提出時にJSONオブジェクトを作成してPerlに渡そうとしています。 jQuery-uiのソート可能な並べ替えを可能にするために、ulliの複数の入れ子になっています。結果が見つからない場合、Jquery each()フォールバック

(いくつかのdivの上に広がる)ソートli Sを救うことができるように、私は次のコードを書いた:「そこクラスdiv_abcdと4つのdiv Sの最大値があるが、それらはドン

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が含まれています。この場合、私は2番目のvalues = values.slice(0, -1);は何も一致しないelsejQuery(this).find("div[id^='CONT']").each(function(){場合を持っているどのような方法がありますライン5

から開口[を削除する問題を抱えています。 .not()を使用しようとしましたが、動作しませんでした。

編集:私の問題が解決されていても

、私はまだ、それぞれ()が一度も通過していないときを知っている可能性があるかどうかを知りたいです。

第二編集:今、明らか

すべて。ありがとう。

+0

私はより良い方法は、配列に値をプッシュすることだと思うし、 'join( '、')'を実行すると、末尾のカンマを心配する必要はありません。 Felixが提案していることを実行します。P – Mottie

答えて

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

更新:あなたはまた、not()

リファレンスの代わりにis()を使用する必要があります。mapgetJSON

このDEMOをチェックしてください。

更新は、あなたの質問に答えるために:

をあなたは常にlengthを使用して選択されているどのように多くの要素を確認することができます。

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

ありがとうこれは私の手動構築文字列と同じ仕事を行い、それは私の問題を解決します。しかし、私はまだそれぞれが(一度も)一度も動かないことを知る可能性があるかどうかを知りたいです。 – Pit

+0

@Pit:最新の回答をご覧ください。 –

+0

できれば私はあなたの答えを2度受け入れます。どうもありがとう。 – Pit

1

結果を変数に取得し、結果の長さを確認することができます。空でない場合は、ループを実行するか、トリミングをスキップできます。

+0

each()ループの内部に変数を設定します。これは、ループに入っていなければ設定されません。変数が設定されているかどうか確認する場合は、トリミングは行われますか?それは動作するはずですが、私はそれを行うより適切な方法があると思った – Pit

 関連する問題

  • 関連する問題はありません^_^