Comment utiliser les variables JavaScript dans les sélecteurs jQuery?

160

Comment utiliser des variables JavaScript comme paramètre dans un sélecteur jQuery?

<script type="text/javascript">
$(function(){    
  $("input").click(function(){
    var x = $(this).attr("name");

    $("input[id=x]").hide();    
  });    
});
</script>

<input type="text" id="bx"/><input type="button" name="bx"/>
<input type="text" id="by"/><input type="button" name="by"/>

En gros, ce que je veux faire, c'est pouvoir cacher l'élément qui a un idégal au nom de l'élément sur lequel on clique.

user225269
la source

Réponses:

243
var name = this.name;
$("input[name=" + name + "]").hide();

OU vous pouvez faire quelque chose comme ça.

var id = this.id;
$('#' + id).hide();

OU vous pouvez également donner un effet.

$("#" + this.id).slideUp();

Si vous souhaitez supprimer définitivement l'élément entier de la page.

$("#" + this.id).remove();

Vous pouvez également l'utiliser dans ce domaine également.

$("#" + this.id).slideUp('slow', function (){
    $("#" + this.id).remove();
});
Vins
la source
2
Il est important de noter que la variable utilisée pour concaténer doit être non numérique, alors faites toString () si id est un nombre.
isync
IE 11 n'aime pas ça, $ ('#' + id) .hide () ;, il dit qu'il n'est pas défini.
Welshboy
55
$(`input[id="${this.name}"]`).hide();

Comme vous utilisez un identifiant, cela fonctionnerait mieux

$(`#${this.name}`).hide();

Je recommande vivement d'être plus précis dans votre approche pour masquer des éléments via des clics de bouton. J'opterais plutôt pour l'utilisation d'attributs de données. Par exemple

<input id="bx" type="text">
<button type="button" data-target="#bx" data-method="hide">Hide some input</button>

Ensuite, dans votre JavaScript

// using event delegation so no need to wrap it in .ready()
$(document).on('click', 'button[data-target]', function() {
    var $this = $(this),
        target = $($this.data('target')),
        method = $this.data('method') || 'hide';
    target[method]();
});

Vous pouvez désormais contrôler complètement l'élément que vous ciblez et ce qui lui arrive via le HTML. Par exemple, vous pouvez utiliser data-target=".some-class"et data-method="fadeOut"pour faire disparaître une collection d'éléments.

Phil
la source
14
$("input").click(function(){
        var name = $(this).attr("name");
        $('input[name="' + name + '"]').hide();    
    });   

Fonctionne également avec ID:

var id = $(this).attr("id");
$('input[id="' + id + '"]').hide();

quand, (parfois)

$('input#' + id).hide();

ne fonctionne pas, comme il se doit .

Vous pouvez même faire les deux:

$('input[name="' + name + '"][id="' + id + '"]').hide();
Alexx Roche
la source
7
var x = $(this).attr("name");
$("#" + x).hide();
Alex R.
la source
5

$("#" + $(this).attr("name")).hide();

Morgar
la source
2
  1. Modèle de chaîne ES6

    Voici un moyen simple si vous n'avez pas besoin du support IE / EDGE

    $(`input[id=${x}]`).hide();

    ou

    $(`input[id=${$(this).attr("name")}]`).hide();

    Il s'agit d'une fonctionnalité es6 appelée chaîne de modèle


  1. Concaténation de chaînes

    Si vous avez besoin du support IE / EDGE, utilisez

    $("#" + $(this).attr("name")).hide();


  1. Sélecteur dans DOM comme attribut de données

    C'est ma méthode préférée car cela vous permet de coder vraiment SEC

    // HTML
    <input type="text"   id="bx" />
    <input type="button" data-input-sel="#bx" value="1" class="js-hide-onclick"/>
    
    //JS
    $($(this).data("input-sel")).hide();

aWebDeveloper
la source