Come posso ottenere l'ID di un elemento usando jQuery?


1390
<div id="test"></div>
<script>
  $(document).ready(function() {
    alert($('#test').id);
  });  
</script>

Perché non funziona sopra e come devo fare?


5
Ottenere l'ID di un elemento che è stato selezionato tramite il suo ID? oO
Martin Schneider,

Codice di esempio. Sto lavorando a un trigger di evento che utilizza "this" e ho bisogno di sapere che cosa ha attivato l'evento e di monitorare indipendentemente quante volte viene attivato ciascun elemento. Costruire un campione con "this" sarà troppo grande.
Nelson,

Risposte:


2303

Il modo jQuery:

$('#test').attr('id')

Nel tuo esempio:

$(document).ready(function() {
  console.log($('#test').attr('id'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test"></div>

O tramite il DOM:

$('#test').get(0).id;

o anche :

$('#test')[0].id;

e la ragione dietro l'utilizzo di $('#test').get(0)in JQuery o addirittura $('#test')[0]è che $('#test')è un selettore JQuery e restituisce un array () di risultati non un singolo elemento dalla sua funzionalità predefinita

un'alternativa per il selettore DOM in jquery è

$('#test').prop('id')

che è diverso da .attr()e $('#test').prop('foo')afferra il DOM specificato fooproprietà, mentre $('#test').attr('foo')afferra il codice HTML specificato fooattributi e si possono trovare maggiori dettagli sulle differenze qui .


234
Mi stupisce ogni volta che jQuery non abbia una scorciatoia per questo tipo $('#test').id().
timore

5
Sarebbe raramente utile perché gli ID sono tipicamente codificati in HTML e JS. Quando scrivi JS, conosci già l'ID di qualche elemento, quindi scrivi quell'ID per recuperare l'elemento. Raramente è necessario ottenere l'ID di un elemento a livello di codice.
daniel1426,

10
Fallo 164969 volte. Inoltre ora sono qui. Ho un codice che inizializza i moduli. Alcuni dei moduli hanno requisiti speciali. Ho potuto cercare elementi di modulo specifico per decidere cosa fare, ma credo che identificare la forma - così l'id della forma - è il modo più logico e infallibile.
Slashback

50
Perché dovrei avere l'ID di un elemento? Perché ho un gestore eventi collegato a una classe di elementi e ho bisogno di sapere quale particolare elemento ha attivato l'evento. Spero di farlo bene.
Buttle Butkus,

4
Opps ... realizzalo 1.122.603 volte ..: P
BvuRVKyUVlViVIc7

85

$('selector').attr('id')restituirà l'id del primo elemento corrispondente. Riferimento .

Se il set associato contiene più di un elemento, è possibile utilizzare l' .each iteratore convenzionale per restituire un array contenente ciascuno degli ID:

var retval = []
$('selector').each(function(){
  retval.push($(this).attr('id'))
})
return retval

Oppure, se sei disposto a diventare un po 'più grintoso, puoi evitare il wrapper e utilizzare la .map scorciatoia .

return $('.selector').map(function(index,dom){return dom.id})

9
A proposito, penso che retval.push($(this).attr('id'))possa essere scrittoretval.push(this.id)
Darren Cook,

Se hai bisogno di un attributo di dati HMTL5 - ** allora usa qualcosa del genere: return $('.selector').map(function(i, dom){ return $(dom).attr('data-id'); })
revoca il

La proprietà .selector è stata deprecata in jQuery 1.7 ed è mantenuta solo nella misura necessaria per supportare .live () nel plugin jQuery Migrate. La proprietà non è mai stata un indicatore affidabile del selettore che potesse essere utilizzato per ottenere l'insieme di elementi attualmente contenuti nell'insieme jQuery in cui era una proprietà, poiché i successivi metodi di attraversamento potrebbero aver modificato l'insieme.
Andrew Day,

40

idè una proprietà di un html Element. Tuttavia, quando scrivi $("#something"), restituisce un oggetto jQuery che avvolge gli elementi DOM corrispondenti. Per recuperare il primo elemento DOM corrispondente, chiamaget(0)

$("#test").get(0)

Su questo elemento nativo, puoi chiamare id o qualsiasi altra proprietà o funzione DOM nativa.

$("#test").get(0).id

Questo è il motivo per cui idnon funziona nel tuo codice.

In alternativa, usa il attrmetodo di jQuery poiché altre risposte suggeriscono di ottenere l' idattributo del primo elemento corrispondente.

$("#test").attr("id")

25

Le risposte sopra sono fantastiche, ma man mano che jquery si evolve .. puoi anche fare:

var myId = $("#test").prop("id");

4
@cjbarth è attr()stato aggiunto in 1.0 ed è prop()stato aggiunto in 1.6, quindi suppongo che il tuo commento prop()sia il nuovo modo.
Erik Philips,

3
@ErikPhilips Credo, piuttosto che vecchio e nuovo, dipende se sei interessato all'output originale quando la pagina è caricata ( attr) o potenzialmente modificata da script ( prop). Se in realtà non stai modificando l' idattributo di alcun elemento usando lo script lato client, allora prope attrsono identici.
AntonChanning,

23
$.fn.extend({
    id : function() {
        return this.attr('id');
    }
});

alert( $('#element').id() );

Un certo codice di controllo richiesto ovviamente, ma facilmente implementabile!


9

.idnon è una funzione jquery valida. È necessario utilizzare la .attr()funzione per accedere agli attributi di un elemento. È possibile utilizzare .attr()sia per modificare un valore di attributo specificando due parametri, sia per ottenere il valore specificandone uno.

http://api.jquery.com/attr/


7

Se vuoi ottenere un ID di un elemento, diciamo per esempio un selettore di classe, quando un evento (in questo caso evento click) è stato generato su quell'elemento specifico, allora il seguente farà il lavoro:

 $('.your-selector').click(function(){
       var id = $(this).attr('id');
 });

6

$('#test').attr('id') Nel tuo esempio:

<div id="test"></div>

$(document).ready(function() {
    alert($('#test').attr('id'));
}); 

5

Bene, sembra che non ci sia stata una soluzione e vorrei proporre la mia soluzione che è un'espansione del prototipo di JQuery. L'ho inserito in un file Helper che viene caricato dopo la libreria JQuery, quindi il controllo perwindow.jQuery

if (window.jQuery) {
    $.prototype.id = function () {
        if (this.length > 1) {
            var val = [];
            this.each(function (idx, el) {
                val.push($(el).id());
            });
            return val;
        } else {
            return this.attr('id');
        }
    }
}

Potrebbe non essere perfetto, ma è forse un inizio per ottenere l'inclusione nella libreria JQuery.

Restituisce un singolo valore di stringa o una matrice di valori di stringa. La matrice di valori stringa è per l'evento utilizzato un selettore multi-elemento.


4

$('#test')restituisce un oggetto jQuery, quindi non puoi semplicemente usarlo object.idper ottenerloId

è necessario utilizzare $('#test').attr('id'), che restituisce la richiesta IDdell'elemento

Questo può anche essere fatto come segue,

$('#test').get(0).id che è uguale a document.getElementById('test').id


1
.. e anche $('#test')[0].idquale è lo stesso di.get(0)
Gabriele Petrioli,

3

Forse utile per gli altri che trovano questa discussione. Il codice seguente funzionerà solo se usi già jQuery. La funzione restituisce sempre un identificatore. Se l'elemento non ha un identificatore, la funzione genera l'identificatore e lo aggiunge all'elemento.

var generatedIdCounter = 0;

$.fn.id = function() {
    var identifier = this.attr('id');

    if(!identifier) {
        generatedIdCounter++;
        identifier = 'isGenerated_' + generatedIdCounter;

        this.attr('id', identifier);
    }

    return identifier;
}

Come usare:

$('.classname').id();

$('#elementId').id();

2
$('tagname').attr('id');

Usando il codice sopra puoi ottenere l'id.


2

Questa è una vecchia domanda, ma a partire dal 2015 potrebbe effettivamente funzionare:

$('#test').id;

E puoi anche fare incarichi:

$('#test').id = "abc";

Finché si definisce il seguente plug-in JQuery:

Object.defineProperty($.fn, 'id', {
    get: function () { return this.attr("id"); },
    set: function (newValue) { this.attr("id", newValue); }
});

È interessante notare che, se elementè un elemento DOM, allora:

element.id === $(element).id; // Is true!


0

Può essere ID elemento, classe o automaticamente usando even

------------------------
$(this).attr('id');
=========================
------------------------
$("a.remove[data-id='2']").attr('id');
=========================
------------------------
$("#abc1'").attr('id');
=========================

-1

Importante: se stai creando un nuovo oggetto con jQuery e legando un evento, DEVI usare prop e non attr , in questo modo:

$("<div/>",{ id: "yourId", class: "yourClass", html: "<span></span>" }).on("click", function(e) { alert($(this).prop("id")); }).appendTo("#something");


-1

Questo risolverà finalmente i tuoi problemi:

supponiamo che tu abbia molti pulsanti su una pagina e desideri cambiarne uno con jQuery Ajax (o non ajax) a seconda del loro ID.

diciamo anche che hai molti tipi diversi di pulsanti (per moduli, per approvazione e per scopi simili) e vuoi che jQuery tratti solo i pulsanti "mi piace".

ecco un codice che funziona: jQuery tratterà solo i pulsanti della classe .cls-hlpb, prenderà l'id del pulsante su cui è stato fatto clic e lo cambierà in base ai dati che provengono da ajax.

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">    </script>
<script>
$(document).ready(function(){
$(".clshlpbtn").on('click',function(e){
var id = $(e.target).attr('id');
 alert("The id of the button that was clicked: "+id);
$.post("demo_test_post.asp",
    {
      name: "Donald Duck",
      city: "Duckburg"
    },
    function(data,status){

    //parsing the data should come here:
    //var obj = jQuery.parseJSON(data);
    //$("#"+id).val(obj.name);
    //etc.

    if (id=="btnhlp-1")
       $("#"+id).attr("style","color:red");
    $("#"+id).val(data);
    });
});




});
</script>
</head>
<body>

<input type="button" class="clshlpbtn" id="btnhlp-1" value="first btn">    </input>
<br />
<input type="button" class="clshlpbtn" id="btnhlp-2" value="second btn">    </input>
<br />
<input type="button" class="clshlpbtn" id="btnhlp-9" value="ninth btn">    </input>

</body>
</html>

il codice è stato preso da w3schools e modificato.


-1
<html>
<head>
  <link rel="stylesheet"href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </head>
<?php
    // include Database connection file 
    include("db_connection.php");

    // Design initial table header 
    $data = '<table class="table table-bordered table-striped">
                        <tr>
                            <th>No.</th>
                            <th>First Name</th>
                            <th>Last Name</th>
                            <th>Email Address</th>
                            <th>Update</th>
                            <th>Delete</th>
                        </tr>';
    $query = "SELECT * FROM users";
    if (!$result = mysqli_query($con, $query)) {
        exit(mysqli_error($con));
    }
    // if query results contains rows then featch those rows 
    if(mysqli_num_rows($result) > 0)
    {
        $number = 1;
        while($row = mysqli_fetch_assoc($result))
        {
            $data .= '<tr>
                <td>'.$number.'</td>
                <td>'.$row['first_name'].'</td>
                <td>'.$row['last_name'].'</td>
                <td>'.$row['email'].'</td>
                    <td><button onclick="DeleteUser('.$row['id'].')" class="btn btn-danger">Delete</button>
                </td>
            </tr>';
            $number++;
        }
    }

    else
    {
        // records now found 
        $data .= '<tr><td colspan="6">Records not found!</td></tr>';
    }

    $data .= '</table>';
    echo $data;
?>

<script type="text/javascript">

    function DeleteUser(id) {
    var conf = confirm("Are you sure, do you really want to delete User?");
    if (conf == true) {
        $.ajax({
                    url:'deleteUser.php',
                    method:'POST',
                    data:{
                        id:id
                    },
            success:function(data){
                      alert('delete successfully');
                   }




}
});

deleteUser.php

<?php
// check request
if(isset($_POST['id']) && isset($_POST['id']) != "")
{
    // include Database connection file
    include("db_connection.php");

    // get user id
    $user_id = $_POST['id'];

    // delete User
    $query = "DELETE FROM users WHERE id = '$user_id'";
    if (!$result = mysqli_query($con, $query)) {
        exit(mysqli_error($con));
    }
}
?>

-1

non risponde all'OP, ma può essere interessante per gli altri: .idin questo caso è possibile accedere al campo:

$('#drop-insert').map((i, o) => o.id)

1
Sono grato ai downvoter quando spiegano cosa non va nella mia comprensione. altrimenti li trovo interessanti come una zanzara.
mariotomo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.