2013-04-25 11 views
11

Ich möchte eine Teilmenge von Tds aus einer Tabelle auswählen.Verwenden Sie jQuery zum Auswählen mehrerer Elemente mit .eq()

Ich weiß vorher, was die Indizes sind, aber sie sind effektiv zufällig (nicht ungerade oder gerade Indizes, etc).

Zum Beispiel sagen, ich möchte die 0th, 5th und 9th td auswählen.

indexesToSelect = [0, 5, 9]; 

// 1) this selects the one by one 
$('table td').eq(0) 
$('table td').eq(5) 
$('table td').eq(9) 


// 2)this selects them as a group (with underscore/lodash) 
var $myIndexes = $(); 

_.forEach(indexesToSelect, function (idx) { 
    $myIndexes = $myIndexes.add($('table td').eq(idx)); 
}); 

So (2) funktioniert und ich benutze das, aber ich frage mich, ob es eine natürlichere Art und Weise mit jQuery ist.

So etwas wie die Übergabe von .eq() ein Array von Indizes? (das funktioniert nicht)

Wenn nicht, werde ich ein kleines Plugin für etwas wie. eqMulti (Array) schreiben.

hinweis: es gibt keine klasse, die diese tds ausschließlich teilen, also die auswahl auf klasse wird nicht funktionieren.

Antwort

16

ich es mit .filter() tun würde und $.inArray():

var elements = $("table td").filter(function(i) { 
    return $.inArray(i, indexesToSelect) > -1; 
}); 

Ein anderer [mehr hässlich] Art und Weise ist die Zuordnung zu einer Selektor:

var elements = $($.map(indexesToSelect, function(i) { 
    return "td:eq(" + i + ")"; 
}).join(","), "table"); 
+0

Ich denke, der erste ist ziemlich gutaussehend. – Jai

+0

Filter sieht aus wie ich will, danke. – Sean

2

versuchen diese

$('table td:eq(0), table td:eq(5), table td:eq(9)') 
+0

Nun, das wird es tun, aber das Array von Indizes ich will, ist nicht konstant. Es würde eine Funktion benötigen, um das Array in eine Zeichenkette wie die hier angegebene umzuwandeln. Aber für bekannte Indizes ist das gut. – Sean

6

Ich habe die Filtermethode von VisioN in einen jQuer eingepackt y-Plugin:

$.fn.eqAnyOf = function (arrayOfIndexes) { 
    return this.filter(function(i) { 
     return $.inArray(i, arrayOfIndexes) > -1; 
    }); 
}; 

So, jetzt Nutzung ist schön und sauber:

var $tds = $('table td').eqAnyOf([1, 5, 9]); 
+0

Schön! Habe in meinem neuen Projekt einen Leckerbissen gemacht. – AshHimself

+0

Das ist großartig - danke. – cheshireoctopus

2
$('table td').filter(':eq(' + indexesToSelect.join('), :eq(') + ')') 
Verwandte Themen