Como posso adicionar um item da lista, a fim usando jQuery?

votos
9

Alguém sabe como adicionar um item para uma lista, mas fazê-lo por isso é ordenada alfabeticamente usando jQuery? Eu tenho o seguinte código que acrescenta um item de uma lista suspensa para o final da lista:

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

mas eu gostaria de ser capaz de inseri-lo em seu lugar apropriado em vez de apenas acrescentar ao final da lista existente.

Qualquer ajuda é muito apreciada! Obrigado!

Publicado 19/05/2009 em 14:22
fonte usuário
Em outras línguas...                            


4 respostas

votos
7

Eu acho que isso iria funcionar:

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);

O valor do firstafteritemserá o primeiro item da lista que tem um valor de texto após o que você está adicionando. (Ou nenhum se ele seria o último.) Então o if / else seria ou inseri-lo antes desse item ou no final da lista.

(Isto, naturalmente, assume que os valores de sua lista já estão em ordem.)

Respondeu 19/05/2009 em 14:35
fonte usuário

votos
1
<script type="text/javascript">
     $(document).ready(function(){
     $("#doctype li:first").before("<li><a href='intranet/library'>All documents</a></li>");
     });
</script>
Respondeu 24/09/2010 em 13:47
fonte usuário

votos
0

Você pode analisar a lista para ver onde o item deve ser adicionado e, em seguida, usar a função jquery depois () para adicionar o item no lugar.

Respondeu 19/05/2009 em 14:42
fonte usuário

votos
0

Eu não acho que há uma maneira fácil com o núcleo jQuery, pelo menos.

Em cima da minha cabeça, não testada, algo simples como isso pode funcionar se a sua lista é curta (desde a sua 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); }
Respondeu 19/05/2009 em 14:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more