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.