Wie erhalte ich das Daten-ID-Attribut?


813

Ich verwende das jQuery-Treibsand-Plugin. Ich muss die Daten-ID des angeklickten Elements abrufen und an einen Webservice übergeben. Wie erhalte ich das Daten-ID-Attribut? Ich verwende die .on()Methode, um das Klickereignis für sortierte Elemente erneut zu binden.

$("#list li").on('click', function() {
  //  ret = DetailsView.GetProject($(this).attr("#data-id"), OnComplete, OnTimeOut, OnError);
  alert($(this).attr("#data-id"));
});
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>

<ul id="list" class="grid">
  <li data-id="id-40" class="win">
    <a id="ctl00_cphBody_ListView1_ctrl0_SelectButton" class="project" href="#">
      <img src="themes/clean/images/win.jpg" class="project-image" alt="get data-id" />
    </a>
  </li>
</ul>


57
Hinweis für neue Besucher: JQuerys .live () -Methode wurde zugunsten von .on ()
dendini

3
Sie sollten das # aus der Warnung entfernen, Sie brauchen es nicht :-)
Becs Carter

attr ("# data-id")) ist falsch. korrigiert: attr ("Daten-ID"));
guido _nhcol.com.br_

@BruceAdams Es kann sich lohnen, die Frage zu bearbeiten, um die on()Methode zu verwenden, die live()jetzt veraltet ist, und diese Frage wird von einigen Besuchern besucht.
Rory McCrossan

Antworten:


1637

Um den Inhalt des Attributs data-id(wie in <a data-id="123">link</a>) zu erhalten, müssen Sie verwenden

$(this).attr("data-id") // will return the string "123"

oder .data()(wenn Sie eine neuere jQuery> = 1.4.3 verwenden)

$(this).data("id") // will return the number 123

und der Teil danach data-muss klein geschrieben sein, zB data-idNumwird nicht funktionieren, aber data-idnumwird.


7
Ich musste verwenden, attr()weil jQuery führende Nullen von Postleitzahlen entfernt data()hat. TFM sagt: "Ab jQuery 1.4.3 werden HTML 5-Datenattribute automatisch in das Datenobjekt von jQuery gezogen. ... Es wird versucht, die Zeichenfolge zu konvertieren auf einen JavaScript-Wert (dies schließt Boolesche Werte, Zahlen, Objekte, Arrays und Null ein). Ein Wert wird nur dann in eine Zahl konvertiert, wenn dadurch die Darstellung des Werts nicht geändert wird. Beispielsweise sind "1E02" und "100.000" äquivalent als Zahlen (numerischer Wert 100), aber wenn sie konvertiert werden, ändert sich ihre Darstellung, sodass sie als Zeichenfolgen verbleiben. "
Wesley Murch

43
Dies gibt für mich "undefiniert" zurück.
foreever

4
Obwohl es für einige offensichtlich ist, denke ich, dass es für diejenigen, die Probleme damit hatten, erwähnenswert ist, dass bei Verwendung von .attr () der Text in den Klammern mit dem übereinstimmen muss, was Sie als benutzerdefiniertes Datenattribut festgelegt haben. dh Wenn das benutzerdefinierte Datenattribut das Datenvolumen ist , müssen Sie es mit .attr ("Datenvolumen") referenzieren . Ab jQuery 1.4.3 und unter Verwendung von .data () muss der Text in den Klammern mit Ihrem benutzerdefinierten Datenattribut ohne das Datenpräfix übereinstimmen . dh Wenn das benutzerdefinierte Datenattribut Datenvolumen ist , müssen Sie es mit .data ("Volumen") referenzieren .
Luke

111
Stellen Sie für diejenigen, die melden, dass es nicht funktioniert, sicher, dass Ihr Attribut nur Kleinbuchstaben enthält. Zum Beispiel sollte "data-listId" "data-listid" sein. Den Grund dafür finden Sie unter stackoverflow.com/questions/10992984/… .
WindChimes

2
oder$(this).data().id //returns 123
Dem Pilafian

170

Wenn wir diese Attribute mit vorhandenem, nativem JavaScript abrufen oder aktualisieren möchten, können wir dies mit den Methoden getAttribute und setAttribute wie folgt tun:

Durch JavaScript

<div id='strawberry-plant' data-fruit='12'></div>

<script>
// 'Getting' data-attributes using getAttribute
var plant = document.getElementById('strawberry-plant');
var fruitCount = plant.getAttribute('data-fruit'); // fruitCount = '12'

// 'Setting' data-attributes using setAttribute
plant.setAttribute('data-fruit','7'); // Pesky birds
</script>

Durch jQuery

// Fetching data
var fruitCount = $(this).data('fruit');
OR 
// If you updated the value, you will need to use below code to fetch new value 
// otherwise above gives the old value which is intially set.
// And also above does not work in ***Firefox***, so use below code to fetch value
var fruitCount = $(this).attr('data-fruit');

// Assigning data
$(this).attr('data-fruit','7');

Lesen Sie diese Dokumentation


90

Wichtige Notiz. Beachten Sie, dass das data- Attribut , wenn Sie es dynamisch über JavaScript anpassen, NICHT in der data()jQuery-Funktion wiedergegeben wird. Sie müssen es auch über die data()Funktion einstellen .

<a data-id="123">link</a>

js:

$(this).data("id") // returns 123
$(this).attr("data-id", "321"); //change the attribute
$(this).data("id") // STILL returns 123!!!
$(this).data("id", "321")
$(this).data("id") // NOW we have 321

Guter Punkt ... gibt es eine data (). Aktualisierung, um die Daten aus den Attributen zu aktualisieren?
Harag

1
Dies ist ein wichtiger Punkt für die dynamische Änderung und den dynamischen Zugriff auf den Datenattributwert.
Motahar Hossain


19

Überrascht erwähnte niemand:

<select id="selectVehicle">
     <option value="1" data-year="2011">Mazda</option>
     <option value="2" data-year="2015">Honda</option>
     <option value="3" data-year="2008">Mercedes</option>
     <option value="4" data-year="2005">Toyota</option>
    </select>

$("#selectVehicle").change(function () {
     alert($(this).find(':selected').data("year"));
});

Hier ist das Arbeitsbeispiel: https://jsfiddle.net/ed5axgvk/1/


2
Sehr schöne Antwort. Vielen Dank.
Ruberandinda Geduld

13

HTML

<span id="spanTest" data-value="50">test</span>

JS

$(this).data().value;

oder

$("span#spanTest").data().value;

ANS: 50

Funktioniert bei mir!




11

Der Zugriff auf eigene Datenattribute idist für mich etwas einfach.

$("#Id").data("attribute");

function myFunction(){
  alert($("#button1").data("sample-id"));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button type="button" id="button1" data-sample-id="gotcha!" onclick="myFunction()"> Clickhere </button>


7

Dieser Code gibt den Wert der Datenattribute zurück, z. B. Daten-ID, Datenzeit, Datenname usw., die ich für die ID angezeigt habe

<a href="#" id="click-demo" data-id="a1">Click</a>

js:

$(this).data("id");

// erhalte den Wert der Daten-ID -> a1

$(this).data("id", "a2");

// dies ändert die Daten-ID -> a2

$(this).data("id");

// erhalte den Wert der Daten-ID -> a2


4

Verwenden von jQuery:

  $( ".myClass" ).load(function() {
    var myId = $(this).data("id");
    $('.myClass').attr('id', myId);
  });


0

Ich habe eine Spanne. Ich möchte den Wert des Attributs data-txt-lang nehmen, das definiert verwendet wird.

$(document).ready(function ()
{
<span class="txt-lang-btn" data-txt-lang="en">EN</span>
alert($('.txt-lang-btn').attr('data-txt-lang'));
});

0

Das Problem ist, dass Sie die Option oder ausgewählte Option für Dropdown oder Liste nicht angeben. Hier ist ein Beispiel für Dropdown, ich gehe von einem Datenattribut-Datensatz aus.

$('#select').on('change', function(){
        let element = $("#visiabletoID");
        element.val($(this).find(':selected').data('record'));
    });
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.