Jon
Tengo una lista desordenada:
<ul id="sortable">
<li id="1" class="ui-state-default">First <a href="#" title="delete" class="itemDelete">x</a></li>
<li id="2" class="ui-state-default">Second <a href="#" title="delete" class="itemDelete">x</a></li>
<li id="3" class="ui-state-default">Third <a href="#" title="delete" class="itemDelete">x</a></li>
</ul>
quiero quitar el <li>
desde el <ul>
. He manejado el evento de clic del elemento de clase Eliminar donde trato de eliminar, pero asumo que no funciona porque no puedo eliminar el <li>
como lo llama un niño?
$('.itemDelete').live("click", function() {
var id = $(this).parent().get(0).id;
$("#" + id).remove();
});
¿Cuál es el mejor enfoque?
Blixt
Suponiendo que está utilizando una versión reciente de jQuery:
$('#sortable').on('click', '.itemDelete', function() {
$(this).closest('li').remove();
});
closest
es un poco más dinámico que parent
(a pesar de que parent
funciona aquí también.) Obtiene el li
que está más cerca del elemento actual, hacia arriba en la estructura.
En realidad, la forma en que lo tienes a partir de ahora, id
va a ser indefinido, porque ninguno de los li tiene id.
¿Por qué no simplemente hacer
$(this).parent().remove()
Además, no te olvides de devolver falso.
-
tengo identificaciones olvidadas de pegarlas en la publicación original
– Jon
13 de julio de 2009 a las 14:55
No tienes identificaciones en tu <li>
s
¿Qué tal simplemente
$(this).parent().remove();
Gene
Lo que terminó funcionando para mí: prefije sus atributos de identificación con una cadena o un guión bajo (como han señalado otros)
Dado que los marcos como jQuery Mobile requieren que las identificaciones sean únicas en todas las páginas (no solo en una página), prefijo el nombre de la página, un guión bajo y la identificación numérica que me permite acceder a los registros en una base de datos.
En lugar de enlazar a una clase o al control ul, use ‘on’ para enlazar a li de la lista principal:
$('#sortable').on('dblclick', 'li' function() {
aval = $(this).attr('id').match(/\d+/g); // only want the numbers...
id = aval[0];
name = $(this).text(); // in case you need these for a post...
li = $(this); // so we can remove it from the list after the 'this' object changes inside the ajax call...
// make an ajax call to the server
var jqxhr = $.post( "somepage.php", {name: name, id: id},
function(data) {
li.remove();
$("#sortable").listview("refresh");
},'json').fail(function() { alert("error"); });
return false; // preventDefault doesn't seem to work as well...
});
También podría estar buscando el índice de los elementos con evento
$('#sortable').on('click', '.itemDelete', function(e) {
e.preventDefault();
$(e.target.parentElement).parent()[0].remove();
});
Sus identificaciones no son válidas: las identificaciones no pueden comenzar con dígitos
– Greg
13 de julio de 2009 a las 14:56
@Jon tu pregunta me ayuda mucho
– William Kinan
15 mayo 2012 a las 16:29