2010-10-28 3 views
1

J'ai quelques éléments tr dans le tableau:jQuery supprimer des éléments par condition

<table> 
<tr id="tr_level_1">...</tr> 
<tr id="tr_level_2">...</tr> 
<tr id="tr_level_3">...</tr> 
<tr id="tr_level_4">...</tr> 
<tr id="tr_level_5">...</tr> 
</table> 

en Javascript que j'ai la variable suivante:

var levels = 3; 

Je veux supprimer tous les tr de où nombre dans id est plus que levels. Et si levels est plus que le nombre de tr - en ajoutant trs après le dernier.

Merci beaucoup.

Répondre

4

Working demo

Essayez ceci:

var levels = 3; 
$("table tr:gt("+(levels-1)+")").remove(); 

je soustrais une parce que cette expression ("gt": supérieur) est 0-indicielle.

Pour la deuxième partie de votre question, essayez ceci:

http://www.jsfiddle.net/dactivo/fADHL/

if($("table tr").length<levels){ 
//the code here for less than levels 
} 
else 
{ 
$("table tr:gt("+(levels-1)+")").remove();  
} 
+0

Ceci est net et concis +1 – Sarfraz

1

essayer cette

var total = $("#table").find('tr').length; 
var levels = 3; 
if(levels<=total) { 
    for(levels=levels;levels<=total;levels++) { 
     $("#tr_level_"+levels).remove(); 
    } 
} 
else { 
    $("#table").append("<tr id=\"tr_level_"+total+1+"\">..</tr>"); 
    // this will add the element with tr_level_6 at the end 

} 
0
var levels = 5; 
var lastTr = $('#ranks_percentages tr:last').attr('id'); 
lastTr = lastTr.split('_'); 
var lastLevel = lastTr[1]; 
if (levels < lastLevel) { 
    //removing 
} else { 
    //adding 
} 
+0

'if (levels lastlevel) {/ * add * /}' ... vous ne voulez probablement pas finir avec un tas de même niveau 'tr' – ArtBIT

1

Peut-être ceci:

function editTr(inVal) { 
selector = new RegExp("\d") 
var lastID = selector.exec($("table tr").last().attr("id")); 
if (lastID > inVal) { 
    $("table tr").each(function() { 
     if (selector.exec($(this).attr("id")) > inVal) { 
      $(this).remove(); 
     } 
    }); 
} 
else if (lastID < inVal) { 
    for (x=lastID;x<=inVal;x++) { 
     $("table").append("<tr id=\"tr_level_"+x+"\"></tr>") 
    } 
} 
else { 
    return null 
} 

}

2

Je pense que cela devrait compléter la réponse

var levels = 3; 
var $trs = $("table tr"); 
var currentLevels = $trs.length; 
if (currentLevels > levels) { 
    $trs.filter(":gt(" + (levels - 1) + ")").remove(); 
} else if (currentLevels < levels) { 
    var t = ""; 
    for (i = (currentLevels + 1); i <= levels; i++) { 
     t += '<tr id="tr_level_' + i + '"><td>' + i + '</td></tr>'; 
    } 
    $trs.parent().after(t); 
} 

http://jsfiddle.net/c6XWN/1/ < - niveaux = 10

http://jsfiddle.net/c6XWN/2/ < - niveaux = 5

http://jsfiddle.net/c6XWN/3/ < - niveaux = 3

Bonne chance!

Questions connexes