Bagaimana cara menggunakan variabel JavaScript di pemilih jQuery?

160

Bagaimana cara menggunakan variabel JavaScript sebagai parameter dalam pemilih 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"/>

Pada dasarnya yang ingin saya lakukan adalah dapat menyembunyikan elemen yang memiliki idyang sama dengan nama elemen yang diklik.

pengguna225269
sumber

Jawaban:

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

ATAU Anda dapat melakukan sesuatu seperti ini.

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

ATAU Anda dapat memberikan efek juga.

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

Jika Anda ingin menghapus seluruh elemen secara permanen membentuk halaman.

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

Anda juga dapat menggunakannya dalam hal ini.

$("#" + this.id).slideUp('slow', function (){
    $("#" + this.id).remove();
});
Vins
sumber
2
Penting untuk dicatat bahwa variabel yang digunakan untuk menggabungkan harus non-numerik, jadi lakukan toString () jika id adalah angka.
isync
IE 11 tidak suka ini, $ ('#' + id) .hide () ;, katanya tidak terdefinisi.
Welshboy
55
$(`input[id="${this.name}"]`).hide();

Saat Anda menggunakan ID, ini akan berkinerja lebih baik

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

Saya sangat merekomendasikan untuk lebih spesifik dengan pendekatan Anda untuk menyembunyikan elemen melalui klik tombol. Saya akan memilih untuk menggunakan atribut data. Sebagai contoh

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

Lalu, di JavaScript Anda

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

Sekarang Anda dapat sepenuhnya mengontrol elemen mana yang Anda targetkan dan apa yang terjadi melalui HTML. Misalnya, Anda bisa menggunakan data-target=".some-class"dan data-method="fadeOut"memudar koleksi elemen.

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

Juga berfungsi dengan ID:

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

kapan, (terkadang)

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

tidak bekerja, sebagaimana mestinya .

Anda bahkan dapat melakukan keduanya:

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

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

morgar
sumber
2
  1. ES6 String Template

    Ini adalah cara sederhana jika Anda tidak memerlukan dukungan IE / EDGE

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

    atau

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

    Ini adalah fitur es6 yang disebut string template


  1. Penggabungan string

    Jika Anda perlu menggunakan dukungan IE / EDGE

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


  1. Selektor dalam DOM sebagai atribut data

    Ini adalah cara yang saya sukai karena membuat Anda benar-benar KERING

    // 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
sumber