setAttributeNode() — додати вузол атрибута до елемента
Загальний опис
Element.setAttributeNode() - це метод в JavaScript, який дозволяє встановлювати значення атрибута HTML-елемента за допомогою об'єкта Attr. На відміну від методу setAttribute(), який приймає назву атрибута та його значення як рядки, setAttributeNode() працює з об'єктами Attr, що надає більше можливостей для маніпулювання атрибутами.
Для використання setAttributeNode() спочатку потрібно створити об'єкт Attr за допомогою методу document.createAttribute(). Наприклад:
const attr = document.createAttribute('class');
attr.value = 'new-class';
Тут ми створили об'єкт Attr для атрибута class зі значенням new-class.
Після того, як об'єкт Attr створений, ми можемо встановити його як атрибут елемента за допомогою методу setAttributeNode():
const element = document.getElementById('myElement');
element.setAttributeNode(attr);
Цей код встановлює атрибут class зі значенням new-class для елемента з ідентифікатором myElement.
Одна з переваг використання setAttributeNode() полягає в тому, що він дозволяє встановлювати додаткові властивості атрибута, такі як prefix (префікс атрибута), namespaceURI (URI простору імен атрибута) та ownerElement (елемент, якому належить атрибут). Наприклад:
const attr = document.createAttributeNS('http://www.example.com/ns', 'ex:myAttr');
attr.value = 'attribute-value';
const element = document.getElementById('myElement');
element.setAttributeNode(attr);
У цьому прикладі ми створили атрибут ex:myAttr у просторі імен http://www.example.com/ns зі значенням attribute-value та встановили його для елемента myElement.
Метод setAttributeNode() також може бути використаний для заміни існуючого атрибута елемента новим атрибутом. Якщо атрибут з такою ж назвою вже існує, він буде замінений новим атрибутом. Наприклад:
const attr1 = document.createAttribute('class');
attr1.value = 'old-class';
const attr2 = document.createAttribute('class');
attr2.value = 'new-class';
const element = document.getElementById('myElement');
element.setAttributeNode(attr1);
element.setAttributeNode(attr2); // Замінює старий атрибут 'class' на новий
Загалом, Element.setAttributeNode() є більш гнучким і потужним методом для маніпулювання атрибутами HTML-елементів порівняно з setAttribute(). Він дозволяє працювати з об'єктами Attr, встановлювати додаткові властивості атрибутів та замінювати існуючі атрибути новими. Однак, для більшості простих випадків використання setAttribute() може бути достатнім і зручнішим.
- Порада
-
Перш ніж використовувати
автор: BondsetAttributeNode(), переконайтеся, що ви створили об'єктAttrза допомогою методуdocument.createAttribute(). Наприклад:const newAttr = document.createAttribute('class'); newAttr.value = 'my-class';. - Порада
-
Якщо ви хочете замінити існуючий атрибут елемента, спочатку видаліть його за допомогою методу
автор: BondremoveAttributeNode(). Наприклад:element.removeAttributeNode(element.getAttributeNode('class'));. Це дозволить уникнути помилок при спробі додати дублікат атрибута. - Порада
-
Пам'ятайте, що метод
автор: BondsetAttributeNode()повертає вузол атрибута, який був замінений абоnull, якщо атрибут був доданий вперше. Ви можете зберегти повернений вузол атрибута для подальшого використання або видалення. Наприклад:const oldAttr = element.setAttributeNode(newAttr);.
Синтаксис
setAttributeNode(attribute)
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 1 | 1 | 1 | ≤12.1 | 12 | 6 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 18 | 4 | 1 |
Приклади
+ запропонувати свій приклад у пісочниці
У цьому прикладі ми використовуємо метод setAttributeNode() для додавання нового атрибута до елемента. Це може бути корисно для динамічного встановлення властивостей елементів або створення нових атрибутів.
HTML
<a id="myLink" href="#demo">Посилання для прикладу</a>
JS
const link = document.getElementById('myLink');
const newAttr = document.createAttribute('target');
newAttr.value = '_blank';
// Додаємо новий атрибут target зі значенням '_blank' до посилання
link.setAttributeNode(newAttr);
У цьому складнішому прикладі ми створюємо функцію, яка динамічно додає або видаляє атрибут disabled для всіх елементів input у формі. Це може бути корисно для тимчасового блокування або розблокування форми під час виконання певних операцій.
HTML
<form id="myForm">
<label>Ім'я: <input type="text" name="name" value="Лесь"></label>
<button type="submit">Надіслати</button>
</form>
<input type="text" value="текст для прикладу">
JS
const form = document.getElementById('myForm');
const inputs = form.querySelectorAll('input');
const toggleInputsDisabled = (disabled) => {
inputs.forEach((input) => {
const disabledAttr = document.createAttribute('disabled');
disabledAttr.value = disabled;
if (disabled) {
// Додаємо атрибут disabled до елемента input
input.setAttributeNode(disabledAttr);
} else {
// Видаляємо атрибут disabled з елемента input
const currentDisabledAttr = input.getAttributeNode('disabled');
if (currentDisabledAttr) {
input.removeAttributeNode(currentDisabledAttr);
}
}
});
};
Цей приклад демонструє використання методу setAttributeNode() для динамічного додавання та видалення атрибутів CSS до елемента абзацу на основі стану чекбоксів. Користувач може динамічно змінювати стиль тексту в абзаці, вмикаючи або вимикаючи чекбокси. Метод setAttributeNode() використовується для додавання нових атрибутів CSS до елемента, а removeAttributeNode() - для видалення існуючих атрибутів.
Цей приклад демонструє гнучкість методу setAttributeNode() у маніпуляціях з атрибутами елементів, а також показує, як можна використовувати його для динамічного оновлення стилів або властивостей елементів на основі взаємодії користувача.
HTML
<header>
<h2 class="title">Element: setAttributeNode() method</h2>
<p class="description">Додає або змінює атрибут елемента.</p>
</header>
<main>
<div class="result">
<div id="container">
<p id="paragraph">Цей текст можна зробити курсивом або напівжирним.</p>
</div>
<div>
<label>
<input type="checkbox" id="italicCheckbox"> Курсив
</label>
<label>
<input type="checkbox" id="boldCheckbox"> Напівжирний
</label>
</div>
</div>
</main>
CSS
body {
font-size: 16px;
line-height: 1.5;
font-family: monospace;
}
header {
background-color: #f1f1f1;
margin-bottom: 25px;
padding: 15px;
-webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
-moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}
header h2.title {
padding-bottom: 15px;
border-bottom: 1px solid #999;
}
header p.description {
font-style: italic;
color: #222;
}
.result {
background-color: #f8f8f8;
padding: 15px;
-webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
-moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}
JS
const paragraph = document.getElementById('paragraph');
const italicCheckbox = document.getElementById('italicCheckbox');
const boldCheckbox = document.getElementById('boldCheckbox');
const toggleAttribute = (attribute, value) => {
const attr = document.createAttribute(attribute);
attr.value = value;
const currentAttr = paragraph.getAttributeNode(attribute);
if (currentAttr) {
paragraph.removeAttributeNode(currentAttr);
}
paragraph.setAttributeNode(attr);
};
italicCheckbox.addEventListener('change', () => {
toggleAttribute('style', italicCheckbox.checked ? 'font-style: italic;' : '');
});
boldCheckbox.addEventListener('change', () => {
toggleAttribute('style', boldCheckbox.checked ? 'font-weight: bold;' : '');
});
//# sourceURL=pen.js
Коментарі
Коментарів ще немає — будьте першим!