Wie verwende ich JavaScript-Variablen in jQuery-Selektoren?

160

Wie verwende ich JavaScript-Variablen als Parameter in einem jQuery-Selektor?

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

Grundsätzlich möchte ich in der Lage sein, das Element auszublenden id, dessen Name dem Namen des Elements entspricht, auf das geklickt wird.

user225269
quelle

Antworten:

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

ODER Sie können so etwas tun.

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

ODER Sie können auch einen Effekt erzielen.

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

Wenn Sie das gesamte Element dauerhaft von der Seite entfernen möchten.

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

Sie können es auch hier verwenden.

$("#" + this.id).slideUp('slow', function (){
    $("#" + this.id).remove();
});
Vins
quelle
2
Es ist wichtig zu beachten, dass die zum Verketten verwendete Variable nicht numerisch sein darf. Tun Sie dies auch für String (), wenn id eine Zahl ist.
Isync
IE 11 gefällt das nicht, $ ('#' + id) .hide ();, es heißt, es ist undefiniert.
Welshboy
55
$(`input[id="${this.name}"]`).hide();

Wenn Sie eine ID verwenden, ist dies besser

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

Ich empfehle dringend, Ihre Vorgehensweise zum Ausblenden von Elementen über Schaltflächenklicks genauer zu gestalten. Ich würde mich stattdessen für die Verwendung von Datenattributen entscheiden. Beispielsweise

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

Dann in Ihrem 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]();
});

Jetzt können Sie über HTML vollständig steuern, auf welches Element Sie abzielen und was damit passiert. Sie können beispielsweise eine Sammlung von Elementen verwenden data-target=".some-class"und data-method="fadeOut"ausblenden.

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

Funktioniert auch mit ID:

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

wann (manchmal)

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

funktioniert nicht, wie es sollte .

Sie können sogar beides tun:

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

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

morgar
quelle
2
  1. ES6-String-Vorlage

    Dies ist eine einfache Möglichkeit, wenn Sie keine IE / EDGE-Unterstützung benötigen

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

    oder

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

    Dies ist eine es6-Funktion namens Vorlagenzeichenfolge


  1. String-Verkettung

    Wenn Sie IE / EDGE-Unterstützung benötigen, verwenden Sie

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


  1. Selektor im DOM als Datenattribut

    Dies ist meine bevorzugte Methode, da Sie dadurch wirklich TROCKEN codieren

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