2013-04-22 62 views
1

序列我有形式來序列被含有表:JQuery的複雜選擇

<form id="myForm" method="post"> 
    <table> 
     <tr class="hide"> 
      <td><input /></td> 
     </tr> 
     <tr> 
      <td><input /></td> 
     </tr> 
     ... 
    </table> 
</form> 

我想使用JQuery序列,但不形元件,它們與hide<tr>元件。 我嘗試這樣做:

$('#myForm').not('.hide').serialize() 

但選擇在not僅在表單元素找hide。有沒有辦法在not選擇器中如何檢查父母最接近的<tr>元素?

回答

3

序列化之前從表單元素,它可能更容易先克隆形式,然後刪除不需要的元素,並序列:

var cloned_form = $('#myForm').clone(false); 
    cloned_form.remove('.hide'); 

var serialized = cloned_form.serialize(); 

另一種方式來做到這一點。將目標內的所有元素形式,並過濾掉任何一個.hide元素中,像這樣:

$('*','#myForm').filter(function() { 
    return !$(this).closest('.hide').length; 
}).serialize(); 
+0

我無法刪除元素,因爲在serialiazing之後發佈了數據並進行了驗證。如果有無效值,用戶需要使用刪除的表單元素。 – 2013-04-22 20:45:07

+0

你不是真的從表單中刪除任何內容,這是克隆的重點,你從表單副本中刪除元素,這與在選擇器中不選擇元素完全相同。 – adeneo 2013-04-22 20:47:31

+0

Secondone很棒!非常感謝你。 – 2013-04-23 15:05:59

1

我認爲你可以這樣做:

$("#myForm :input:not(.hide input)").serialize(); 
+0

所有元素不是'input',還有'select','checkbox'和'textarea'。 – 2013-04-22 20:47:19

+0

複選框是一個輸入... – War10ck 2013-04-22 20:47:53

+0

更改爲使用jQuery的':input'僞選擇器,我認爲它應該匹配所有可能的輸入類型。 – Barmar 2013-04-22 20:49:04