Як отримати атрибут data-id?


813

Я використовую плагін jQuery quicksand. Мені потрібно дістати ідентифікатор даних клацнутого елемента та передати його у веб-сервіс. Як отримати атрибут data-id? Я використовую .on()метод для повторного зв’язування події клацання для відсортованих елементів.

$("#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
Повідомлення нових відвідувачів: метод JQuery's .live () був устарений на користь .on ()
dendini

3
Вам слід видалити номер # з попередження, він вам не потрібен :-)
Becs Carter,

attr ("# data-id")) невірно. виправлено: attr ("data-id"));
guideo _nhcol.com.br_

@BruceAdams, можливо, варто відредагувати питання, щоб скористатися on()методом, як live()зараз застарілим, і це питання отримує досить багато відвідувачів.
Рорі Маккросан

Відповіді:


1636

Щоб отримати вміст атрибута data-id(наприклад, у <a data-id="123">link</a>), який ви повинні використовувати

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

або .data()(якщо ви використовуєте новіший jQuery> = 1.4.3)

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

і частина після data-повинна бути малою, наприклад data-idNum, не буде працювати, але data-idnumбуде.


7
Мені довелося використовувати, attr()тому що jQuery знімає провідні нулі з поштових індексів data(), TFM каже: "Станом на jQuery 1.4.3, атрибути HTML 5 автоматично втягуються в об'єкт даних jQuery. ... Кожна спроба робиться для перетворення рядка до значення JavaScript (сюди входять булеви, числа, об'єкти, масиви та нуль). Значення перетворюється на число, лише якщо це не змінює подання значення. Наприклад, "1E02" і "100.000" еквівалентні як числа (числове значення 100), але перетворення їх змінило б їх представлення, так що вони залишаються як рядки ".
Веслі Мерч,

43
Це повернення для мене "невизначеним".
Раніше

4
Хоча для деяких це очевидно, я вважаю, що варто звернути увагу на тих, у кого виникли проблеми з цим, що при використанні .attr () текст у дужках повинен відповідати тому, що ви встановили як власний атрибут даних. тобто якщо спеціальний атрибут даних - це об'єм даних , на нього слід посилатися, використовуючи .attr ("об'єм даних") . І, з JQuery 1.4.3 вгору і використовуючи .data (), текст в дужках повинен відповідати призначений для користувача атрибут даних без в data- префікса. тобто якщо спеціальний атрибут даних - це об'єм даних , ви повинні посилатися на нього, використовуючи .data ("том") .
Лука,

111
Для тих, хто повідомляє, що це не працює, переконайтеся, що ваш атрибут містить лише малі літери. Наприклад, "data-listId" має бути "data-listid". Дивіться stackoverflow.com/questions/10992984/… про причину.
WindChimes

2
або$(this).data().id //returns 123
Дем Пілафіян

170

Якщо ми хочемо отримати або оновити ці атрибути, використовуючи існуючий, власний JavaScript , тоді ми можемо це зробити за допомогою методів getAttribute та setAttribute, як показано нижче:

Через 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>

Через 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');

Прочитайте цю документацію


90

Важлива примітка. Майте на увазі, що якщо ви динамічно налаштовуєте data- атрибут через JavaScript, він НЕ відображатиметься у функції data()jQuery. Ви також повинні налаштувати його за допомогою data()функції.

<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

Хороший момент ... чи є дані (). Refresh, щоб оновити дані з атрибутів?
Хараг

1
Це важливий момент для динамічної зміни та доступу до значення атрибутів даних.
Мотахар Хоссейн

56

Якщо ви не переймаєтесь старими браузерами IE, ви також можете використовувати API набору даних HTML5

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"

Демо: http://html5demos.com/dataset

Повний список підтримки браузера: http://caniuse.com/#feat=dataset


19

Здивований, ніхто не згадав:

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

Ось робочий приклад: https://jsfiddle.net/ed5axgvk/1/


2
Дуже приємна відповідь. Дуже дякую.
Терпіння

13

HTML

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

JS

$(this).data().value;

або

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

ANS: 50

Для мене працює!




11

Доступ до власного атрибуту даних idдля мене трохи простий.

$("#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

Цей фрагмент коду поверне значення атрибутів даних, наприклад: ідентифікатор даних, час даних, ім'я даних тощо., Я показав для ідентифікатора

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

js:

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

// отримати значення data-id -> a1

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

// це змінить ідентифікатор даних -> a2

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

// отримати значення data-id -> a2




0

У мене проліт. Я хочу взяти значення атрибута data-txt-lang, яке використовується визначено.

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

0

Проблема полягає в тому, що ви не вказуєте опцію чи вибраний варіант випадаючого списку чи списку. Ось приклад для спадання, я припускаю запис даних про атрибут даних.

$('#select').on('change', function(){
        let element = $("#visiabletoID");
        element.val($(this).find(':selected').data('record'));
    });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.