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.

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

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.


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



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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.