Come utilizzare le variabili JavaScript nei selettori jQuery?


160

Come posso usare le variabili JavaScript come parametro in un selettore 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"/>

Fondamentalmente quello che voglio fare è riuscire a nascondere l'elemento che ha un valore iduguale al nome dell'elemento su cui si fa clic.

Risposte:


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

O puoi fare qualcosa del genere.

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

O puoi dare anche qualche effetto.

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

Se si desidera rimuovere l'intero elemento in modo permanente dalla pagina.

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

Puoi anche usarlo anche in questo.

$("#" + this.id).slideUp('slow', function (){
    $("#" + this.id).remove();
});

2
È importante notare che la variabile utilizzata per concatenare deve essere non numerica, quindi fare toString () se id è un numero.
isync,

Ad IE 11 non piace questo, $ ('#' + id) .hide () ;, dice che non è definito.
Welshboy,

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

Quando si utilizza un ID, questo avrebbe prestazioni migliori

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

Consiglio vivamente di essere più specifico con il tuo approccio a nascondere elementi tramite clic di pulsanti. Preferirei invece utilizzare i dati-attributi. Per esempio

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

Quindi, nel tuo 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]();
});

Ora puoi controllare completamente quale elemento stai prendendo di mira e cosa succede tramite HTML. Ad esempio, è possibile utilizzare data-target=".some-class"e data-method="fadeOut"sfumare una raccolta di elementi.


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

Funziona anche con ID:

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

quando, (a volte)

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

non funziona, come dovrebbe .

Puoi persino fare entrambe le cose:

$('input[name="' + name + '"][id="' + id + '"]').hide();

7
var x = $(this).attr("name");
$("#" + x).hide();


2
  1. Modello di stringa ES6

    Ecco un modo semplice se non hai bisogno del supporto IE / EDGE

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

    o

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

    Questa è una funzione es6 chiamata stringa di modello


  1. Concatenazione di stringhe

    Se è necessario il supporto IE / EDGE, utilizzare

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


  1. Selettore in DOM come attributo dati

    Questo è il mio modo preferito in quanto ti rende il codice davvero ASCIUTTO

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.