Доступ до атрибута 'data-' без jQuery


75

Чи можу я отримати доступ до атрибута даних без jQuery?

З jQuery легко, але я ніде не бачу, як це зробити без jQuery.

Якщо я шукаю в Google "без jQuery", я отримую лише приклади jQuery.

Це взагалі можливо?


1
це старе, але воно вас заводить
dsdsdsdsd

Відповіді:


121

На ось я знайшов цей приклад:

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

Тож це здається дуже здійсненним.

Оновлення: Оскільки Microsoft зараз (2020) поступово відмовляється від старого движка Internet Explorer на користь Edge на основі Chromium, datasetвластивість, ймовірно, буде працювати скрізь. Виняток деякий час становитимуть організації та корпоративні мережі, де IE все ще змушений. На момент написання цього, хоча - jsPerf все ще показує метод get / setAttribute як швидший, ніж використання набору даних, принаймні в Chrome 81.


Це здається правильним підходом. Крім того, вам, мабуть, потрібно буде зробити щось подібне: document.getElementById ('полуниця-рослина'). SetAttribute ('data-fruit', 'Some Data Here');
sage88

2
Будь ласка, перегляньте відповідь tomor нижче щодо набору даних - це правильна відповідь, якщо вам не потрібно підтримувати застарілі веб-браузери (IE), що насправді шкода для вас, якщо це так ... Усі сучасні версії браузера підтримують HTML5 та ECMAScript 5 (точно ) і 6 на даний момент майже повністю.
Carnix

Здається, це також читабельніше, ніж набір даних. Більшість розробників знали б, що робить цей рядок коду з першого погляду, але не настільки впевнені, що ви можете сказати те саме про набір даних
rdans

39

Ви можете використовувати атрибут набору даних . Як і в:

element = document.getElementById("el");
alert(element.dataset.name); // element.dataset.name == data-name

3
Примітка. Хоча це повністю правильно, це працюватиме лише у браузерах, сумісних з HTML5. Використання getAttributeметоду буде працювати в більшості браузерів.
фредрік

3
Хоча це не обов’язково з зворотною сумісністю із застарілими браузерами (наприклад, усіма версіями IE), це правильна відповідь. Це було, звичайно, перспективне мислення на той час (2013 рік), але зараз 5 років по тому це потрібно робити.
Carnix


-1

Я думаю, ви можете спробувати це:

var ele = document.getElementById("myelement");
if (ele.hasOwnProperty("data")) {
  alert(ele.data);
}

АБО використовувати

alert(ele['data-property']);

1
з документів MDN, ідеально використовувати метод getAttribute, оскільки він швидший, цитую нижче: ** Крім того, ефективність зчитування атрибутів даних порівняно із зберіганням цих даних у сховищі даних JS є низькою. Використання набору даних навіть повільніше, ніж зчитування даних за допомогою getAttribute (). ** - посилання
razzbee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.