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>

Bruce Adams
quelle
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.

Marcel Jackwerth
quelle
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

Lalit Kumar Maurya
quelle
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
Serge Shultz
quelle
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
56

Wenn Sie sich keine Gedanken über alte IE-Browser machen, können Sie auch die HTML5-Dataset-API verwenden

HTML

<div id="my-div" data-info="some info here" data-other-info="more info here">My Awesome Div</div>

JS

var myDiv = document.querySelector('#my-div');

myDiv.dataset.info // "some info here"
myDiv.dataset.otherInfo // "more info here"

Demo: http://html5demos.com/dataset

Vollständige Browser-Support-Liste: http://caniuse.com/#feat=dataset

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

neugierigBoy
quelle
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!

Bamossza
quelle
11

Ich benutze $ .data - http://api.jquery.com/jquery.data/

//Set value 7 to data-id 
$.data(this, 'id', 7);

//Get value from data-id
alert( $(this).data("id") ); // => outputs 7
Gjermund Dahl
quelle
11
var id = $(this).dataset.id

funktioniert bei mir!

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

Aravindh Gopi
quelle
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

Ashokkumar C.
quelle
4

Verwenden von jQuery:

  $( ".myClass" ).load(function() {
    var myId = $(this).data("id");
    $('.myClass').attr('id', myId);
  });
Ignacio Galdames
quelle
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'));
});
Pergin Sheni
quelle
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'));
    });
Haleem Khan
quelle