Jak używać zmiennych JavaScript w selektorach jQuery?

160

Jak używać zmiennych JavaScript jako parametru w selektorze 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"/>

Zasadniczo chciałbym móc ukryć element, który ma wartość idrówną nazwie klikanego elementu.

user225269
źródło

Odpowiedzi:

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

LUB możesz zrobić coś takiego.

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

LUB możesz też dać jakiś efekt.

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

Jeśli chcesz trwale usunąć cały element ze strony.

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

Możesz go również użyć w tym.

$("#" + this.id).slideUp('slow', function (){
    $("#" + this.id).remove();
});
Vins
źródło
2
Należy zauważyć, że zmienna używana do konkatenacji nie może być liczbą, więc wykonaj toString (), jeśli id ​​jest liczbą.
isync
IE 11 tego nie lubi, $ ('#' + id) .hide (); mówi, że jest niezdefiniowane.
Welshboy
55
$(`input[id="${this.name}"]`).hide();

Ponieważ używasz identyfikatora, będzie to działać lepiej

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

Zdecydowanie zalecam bardziej szczegółowe podejście do ukrywania elementów za pomocą kliknięć przycisków. Zamiast tego wybrałbym użycie atrybutów danych. Na przykład

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

Następnie w swoim 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]();
});

Teraz możesz w pełni kontrolować, na który element celujesz i co się z nim stanie za pośrednictwem kodu HTML. Na przykład możesz użyć data-target=".some-class"i data-method="fadeOut"zaniknąć zbiór elementów.

Phil
źródło
14
$("input").click(function(){
        var name = $(this).attr("name");
        $('input[name="' + name + '"]').hide();    
    });   

Działa również z identyfikatorem:

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

kiedy (czasami)

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

nie działa tak , jak powinien .

Możesz nawet zrobić jedno i drugie:

$('input[name="' + name + '"][id="' + id + '"]').hide();
Alexx Roche
źródło
7
var x = $(this).attr("name");
$("#" + x).hide();
Alex R.
źródło
5

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

morgar
źródło
2
  1. Szablon strun ES6

    Oto prosty sposób, jeśli nie potrzebujesz obsługi IE / EDGE

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

    lub

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

    To jest funkcja es6 nazywana ciągiem szablonów


  1. Konkatenacja ciągów

    Jeśli potrzebujesz obsługi IE / EDGE, użyj

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


  1. Selektor w DOM jako atrybut danych

    To jest mój ulubiony sposób, ponieważ sprawia, że ​​kodowanie jest naprawdę SUCHE

    // 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
źródło