2009-08-18 7 views
0

J'ai un menu déroulant à côté de html lien élément de balise, l'élément de liaison est comme ci-dessous:Utiliser JQuery pour supprimer un tag précédent?

<a href="#" class="delete" onclick="remove(this)"> Delete</a>

Il a un attribut onclick réglé sur la fonction javascript ci-dessous:

`function remove(obj) { 

    $(obj).prev('select[name=estateDropDownList]').remove(); 
    $(obj).remove(); 
}` 

Maintenant, il supprime le lien bien, mais il ne supprime pas la liste déroulante PREVIOUS, cette zone de liste déroulante a un nom "estateDropDownList" et je veux juste qu'il supprime seulement cette liste déroulante en utilisant prev() dans JQuery, des idées pour savoir pourquoi seulement supprime le lien et non la liste déroulante?

+0

J'ai aussi essayé, mais cela n'a pas fonctionné: $ ('select [name = estateDropDownList]') prev() remove();.. –

Répondre

2

Je voudrais changer quelques choses d'abord:

<select name="estateDropDownList" class="estate"> 
    ... 
</select> 
<a href="#" class="delete">Delete</a> 

puis:

$(function() { 
    $("a.delete").click(function() { 
    $(this).prevAll("select.estate:first").remove(); 
    $(this).remove(); 
    return false; 
    }); 
}); 

Le point étant que:

  1. Ne pas utiliser l'attribut onclick. Javascript discret est tout au sujet de ne pas jeter votre jargon avec Javascript; Essayez de ne pas utiliser les sélecteurs d'attribut. Ils ne sont pas rapides. Donnez une classe aux éléments concernés
  2. this est déjà défini sur l'ancre sur laquelle vous avez cliqué. Il n'y a pas besoin de le transmettre; et
  3. prev() ne correspond qu'au frère précédent exact. S'il y a quelque chose entre l'ancre et select alors cela ne fonctionnera pas, c'est pourquoi je l'ai changé à prevAll() et ajouté :first pour obtenir le premier. Je ne suis pas sûr à 100% de la commande de ceci. Vous pouvez avoir besoin de :last à la place.
Questions connexes