Обратите внимание, что e
в обработчике событий часто используется для ссылки на переданный параметр event
- чтобы избежать путаницы, вы можете рассмотреть возможность использования другого имени, например, button
или skMinButton
или что-то в этом роде.
Один из вариантов - сначала перебрать все кнопки и удалить их свойство background
:
const buttons = document.querySelectorAll("[name=skMin]");
buttons.forEach((skMinButton) => {
skMinButton.addEventListener('click', () => {
buttons.forEach((button) => {
button.style.removeProperty('background');
});
skMinButton.style.background = 'cyan'
// drillSession.skillMin = e.value
});
});
<span>Minimum Skill Level:</span><br />
<input type='button' id='skMin1' class='btn-sm' name='skMin' value='1' checked>
<input type='button' id='skMin2' class='btn-sm' name='skMin' value='2'>
<input type='button' id='skMin3' class='btn-sm' name='skMin' value='3'>
<input type='button' id='skMin4' class='btn-sm' name='skMin' value='4'>
<input type='button' id='skMin5' class='btn-sm' name='skMin' value='5'>
background
:
const buttons = document.querySelectorAll("[name=skMin]");
let selectedButton;
buttons.forEach((skMinButton) => {
skMinButton.addEventListener('click', () => {
if (selectedButton) {
selectedButton.style.removeProperty('background');
}
selectedButton = skMinButton;
skMinButton.style.background = 'cyan'
// drillSession.skillMin = e.value
})
})
<span>Minimum Skill Level:</span><br />
<input type='button' id='skMin1' class='btn-sm' name='skMin' value='1' checked>
<input type='button' id='skMin2' class='btn-sm' name='skMin' value='2'>
<input type='button' id='skMin3' class='btn-sm' name='skMin' value='3'>
<input type='button' id='skMin4' class='btn-sm' name='skMin' value='4'>
<input type='button' id='skMin5' class='btn-sm' name='skMin' value='5'>
[ 1128] Вы также можете рассмотреть возможность использования делегирования событий, чтобы подключался только один слушатель, а не отдельный для каждой кнопки:
<div class="min-skill">
<span>Minimum Skill Level:</span><br />
<input type='button' id='skMin1' class='btn-sm' name='skMin' value='1' checked>
<input type='button' id='skMin2' class='btn-sm' name='skMin' value='2'>
<input type='button' id='skMin3' class='btn-sm' name='skMin' value='3'>
<input type='button' id='skMin4' class='btn-sm' name='skMin' value='4'>
<input type='button' id='skMin5' class='btn-sm' name='skMin' value='5'>
</div>
Это даст Вам имя элемента тока (имя тега)
<xsl:value-of select ="name(.)"/>
OP-редактирование: Это также добьется цели:
<xsl:value-of select ="local-name()"/>
Никто действительно не указывал на тонкое различие в семантике функций name()
и local-name()
.
name(someNode)
возвраты полное имя узла, и это включает префикс и двоеточие в случае, если узел является элементом или атрибутом. local-name(someNode)
возвраты только локальное название узла, и это не включает префикс и двоеточие в случае, если узел является элементом или атрибутом. Поэтому в ситуациях, где имя может принадлежать двум различным пространствам имен, нужно использовать эти name()
функция для этих имен, которые все еще отличат.
И, BTW, возможно определить обе функции без любого аргумента :
name()
сокращение для [1 122] name(.)
local-name()
, сокращение для [1 124] local-name(.)
Наконец , помните, что не только элементы и атрибуты имеют имена, эти две функции могут также использоваться на ПИ, и на них они идентичны).
<xsl:for-each select="person">
<xsl:for-each select="*">
<xsl:value-of select="local-name()"/> : <xsl:value-of select="."/>
</xsl:for-each>
</xsl:for-each>
<xsl:value-of select="name(.)" /> : <xsl:value-of select="."/>