2010-11-11 10 views
0

Je dois récupérer certaines parties de plusieurs tables, les sauvegarder et enfin générer une nouvelle table en utilisant un modèle jQuery. Mais j'ai des problèmes pour collecter la première valeur.Problèmes lors de l'extraction de parties de tables HTML rendues avec jQuery

HTML

<table> 
    <tr><td colspan="7"><a href="http://link/index.php?view=page&id=2961" target="_blank" title="title">atext1 atext2</a> - stuff 2 - <img src="img/icon_1.gif" class="icon" title="icon1" />12 - <img src="img/icon_2.gif" class="icon" title="icon2" />4 - <span title="long title"><img src="img/icon_3.gif" class="icon" /> stuff 5 </span></td></tr> 
    <tr><th><span title="title1">th1</span></th><th title="title2">th2</th><th title="title3">th3</th><th title="title4">th4</th><th title="title5">th5</th><th title="title6">th6</th><th title="title7">th7</th></tr> 
    <tr><td class="own" style="width:10px;">&nbsp;</td><td><a href="http://link/index.php?view=page2&id=1413" target="_blank" title="title">text</a></td><td><img src="img/icon_4.png" class="icon link" title="icon4" onclick="dothis(118965,[1324,1835,2296,2443,2960,2961,2962,2964,2976,3186,4901,4974]);" /> <a href="javascript:dothat('div1',118965);" title="div1">text</a></td><td><a href="http://link/index.php?view=page3&newid=188898" target="_blank" title="page3">text</a></td><td class="right">24 (9)</td><td class="right">827</td><td class="right">11</td></tr> 
    MORE SIMILAR TRs HERE 
</table> 

JS

var savedData = []; 
tbl = $('#table_1'); // Grab all content within div, which is a whole html table 
var data = []; 
$('tr', tbl).each(function(i, tr) { 
    // Begin the process to grab needed parts 
    if (i == 0) { // first row is special. it is colspan'ed 
    row = $('td', tr).html().split(' - '); // Splitting seems like the only way to get smaller html parts to work with 
    var a_href = $(row).find('a').attr('href'); // returns undefined 
    var a_href = $(row[0]).find('a').attr('href'); // returns undefined 
    var a_href = $('a', row).attr('href'); // returns undefined 
    var a_href = $('a', row[0]).attr('href'); // returns undefined 

    // Grab id only. I thought this would work 
    data['id'] = $('a', row[0]).attr('href').match(/view=page&id=([0-9]+)/)[1]; 
    // Grab the other parts 
    } else { 
    // do stuff for other rows 
    } 
}); 
savedData.push[data]; 

1) Pourquoi suis-je obtenir Undefined? 'row' devient un tableau lors de la division du html interne

2) J'ai aussi au moins 1 tr avec seulement les cellules. Serait-il plus rapide que ces lignes soient exclues du .each(), comme avec un sous-sélecteur, ou simplement l'ignorent (comme if ($('td', tr).length > 0) { // do stuff })?

3) Si je récupère tout le texte() de tout td dans tout tr alors l'utilisation de jQuery.map() est environ 3-4 fois plus rapide que jQuery.each (i, v). Une idée pourquoi?
je peux utiliser $('td[colspan], tr) pour saisir la première rangée, mais jQuery.each() est facile à comprendre et donc de travailler avec

4) Quand je besoin d'utiliser les pièces collectées dans le modèle, puis-je utiliser alors savedData[0].id?

+2

aide si vous postez votre code de table ainsi. Vous mentionnez que vous avez une ligne avec toutes les balises - ce qui pourrait expliquer le non défini - si vous définissez row = $ ('td', tr), et qu'il n'y a pas de , alors vous n'avez rien sélectionné. – Prescott

+0

J'aurais dû dire que str.split fonctionne bien et comme prévu, 5 entrées de tableau. Tableau ajouté – Kim

Répondre