2010-02-13 9 views
1

J'essaie de modifier le code ci-dessous de sorte que si "this" contient la classe "search_init", il ne fera que remplacer cette classe, car le balisage lui-même a plusieurs classes qui lui sont appliquées. J'ai essayé ~ = et^=, mais cela me donne des erreurs à propos de missing().jquery change == contient?

$("tfoot input").focus(function() { 
      if (this.className == "search_init") { 
       this.className = ""; 
       this.value = ""; 
      } 
     }); 

Répondre

5

Essayez ceci:

$("tfoot input").focus(function() { 
    var $this = $(this); 
    if ($this.hasClass("search_init")) { 
     $this.removeClass("search_int").val(''); 
    } 
}); 
+0

Court, efficace, lisible. +1 – whiskeysierra

+0

+1, bien que vous puissiez le rendre encore plus court avec '$ (this) .filter ('. Search_init'). RemoveClass ('search_init) .val (' ');' – user113716

+0

@patrick oui mais vous avec ça pourrait exécuter la removeClass et val sur un objet jQuery vide qui est une perte. – PetersenDidIt

1
$("tfoot input.search_init").focus(function() { 
       $(this).removeClass("search_init"); 
       this.value = ""; 
      } 
     }); 

~ = « sélectionne les éléments qui ont l'attribut spécifié avec une valeur contenant un mot donné, délimité par des espaces. » Cela fonctionnerait, mais il est beaucoup plus logique d'utiliser des sélecteurs de classe intégrés plutôt que d'utiliser l'attribut de classe lui-même. De même avec^=, qui "sélectionne les éléments qui ont l'attribut spécifié avec une valeur commençant exactement avec une chaîne donnée".

1

devrait être une seule ligne:

$('tfoo input.search_init').focus(function(e) {$(this).removeClass('search_init').val('');}); 

En aparté, vous pouvez changer le style avec une .search_init:focus méta classe css.