2013-08-22 49 views
0

我有以下HTML表格:從HTML表中提取數據,並建立一個字符串使用jQuery

<tbody> 
    <tr> 
     <th>Actions</th><th>Contact Type</th><th>Contact</th><th>Call Order</th> <th>Text</th> 
    </tr> 
    <tr id="rulesegment_1"> 
     <td><input type="button" value="Remove" class="removeruleset"></td> 
     <td class="contact_type" id="contact_type1">6</td> 
     <td id="contact_details1">1234</td> 
     <td class="call_order" id="call_order1">1</td> 
     <td class="textm" id="textm1">false</td> 
    </tr> 
    <tr id="rulesegment_2"> 
     <td><input type="button" value="Remove" class="removeruleset"></td> 
     <td class="contact_type" id="contact_type2">4</td> 
     <td id="contact_details2">123424234</td> 
     <td class="call_order" id="call_order2">1</td> 
     <td class="textm" id="textm2">false</td> 
    </tr> 
    </tbody> 

我需要從表中提取所有數據,並用一個看起來像這樣的字符串結束:

"6,1234,1,false~4,123424234,1,false~" 

這樣做的最佳方法是什麼? jquery中是否有任何方法/函數會這樣做?

回答

1

我建議:

// select all the 'td' elements: 
var str = $('td').filter(function(){ 
    /* filter those elements to keep only those the 
     length of whose trimmed text is greater than zero: 
    */ 
    return $.trim($(this).text()).length > 0; 
}).map(function(){ 
    // trim the text of those kept 'td' elements, and return it 
    return $.trim($(this).text()); 
/* store it in an array (using 'get()'), and join those array 
    elements together with commas: 
/* 
}).get().join(','); 

console.log(str); 

JS Fiddle demo

更新上述以包括代字號(~):

var str = $('td').filter(function(){ 
    return $.trim($(this).text()).length > 0; 
}).map(function(){ 
    var self = $(this), 
     text = self.text(); 
    return !self.next().length ? text + '~' : text; 
}).get().join(','); 

console.log(str); 

JS Fiddle demo

參考文獻:

+0

,如果我想指定表名,哪裏要那麼做?當我的表單上的提交按鈕被點擊時,此代碼需要運行。我已經嘗試用表名替換(this)...但是它讓我很難受 – dot

+0

如果'name'是'id',那麼:'$('#tableID td')'(而不是' $( 'TD')')。 –

+0

大衛,太棒了!唯一的問題是我需要防止在第二條記錄之前包含的額外逗號。例如,您的示例代碼爲我生成這種類型的數據:「6,4442,1,false〜,4,93923423,2,true〜」 但我想「6,4442,1,false〜4,93923423 ,2,true〜「 我正在嘗試檢查你的代碼,看看我是否也可以自己修復它...謝謝。 – dot

0

剛剛鏈中的$ .MAP調用,處理行,然後細胞,就像這樣:

// Get all the tr's that have an id attribute 
$.map($('tr[id]'),function(node){ 

    // Inside of each row, exclude the cells that have an input. 
    return $.map($('td', node).not(':has(input)'), function(td){ 
     return $(td).text(); 
    }).join(','); // Join the text with a comma 
}).join('~'); // Join the rows with a tilde 

這裏的測試:

http://jsbin.com/avUb/1/edit

相關問題