2009-05-19 12 views
9

Czy ktoś wie, jak dodać element do listy, ale robi to tak, że jest sortowane alfabetycznie za pomocą jQuery? Mam następujący kod, który po prostu dodaje element z listy rozwijanej na końcu listy:Jak dodać element listy w porządku za pomocą jQuery?

$("#projectList").append(
    "<li>" 
    + $("#Projects :selected").text() 
    + " <span class='removeProject' projectId='" + $("#Projects").val() + "'>Remove</span>" 
    + "</li>" 
); 

ale chciałbym, aby móc wstawić go w odpowiednim miejscu, a nie tylko dołączenie do koniec istniejącej listy.

Każda pomoc jest bardzo doceniana! Dzięki!

Odpowiedz

7

myślę, że to będzie działać:

var new = $(
    "<li>" 
    + $("#Projects :selected").text() 
    + " <span class='removeProject' projectId='" + $("#Projects").val() + "'>Remove</span>" 
    + "</li>" 
); 

var firstafteritem = $("#projectList").children().filter(function() { 
    return ($(this).text() > $("#Projects :selected").text()) 
}).eq(0); 

if (firstafteritem.length > 0) firstafteritem.before(new); 
else       $("#projectList").append(new); 

Wartość firstafteritem będzie pierwszy element listy, który ma wartość tekstu po jednym jesteś dodając. (Lub żaden, jeśli byłby ostatni.) Wtedy if/else wstawiłby to przed tą pozycją lub na końcu listy.

(To oczywiście zakłada, że ​​wartości na liście są już w porządku.)

+0

To działało idealnie! Dziękuję Ci! –

0

Nie sądzę, istnieje łatwy sposób z rdzenia jQuery przynajmniej.

Off szczycie mojej głowy, niesprawdzone, coś prostego, jak to może działać, jeśli lista jest krótka (od jego O (N))

var liArr=$("#projectList li").get(); 
var newText=$("#Projects :selected").text(); 
var newEle=$("<li>" 
    + newText 
    + " <span class='removeProject' projectId='" + $("#Projects").val() + "'>Remove</span>" 
    + "</li>"); 
for(var li=0; li<liArr.length; li++) { 
    if(newText<liArr[li].innerHTML) { 
    $("#projectList").get(0).insertBefore(newEle,liArr[li]); 
    newEle=null; 
    break; 
    } 
    } 
if(newEle) { $("#projectList").append(newEle); } 
0

Można przeanalizować listę, aby zobaczyć, gdzie element powinien zostać dodany, a następnie użyć funkcji jokeryzacji after(), aby dodać element w miejscu.

1
<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("#doctype li:first").before("<li><a href='intranet/library'>All documents</a></li>"); 
    }); 
</script> 
+2

Witamy w StackOverflow, @irshad. Poświęć trochę czasu, aby spojrzeć na format odpowiedzi: http://stackoverflow.com/editing-help =) –

Powiązane problemy