Допустим, у меня есть html-форма. Каждый вход / выбрать / текстовое поле будет иметь соответствующий <label>
с for
набором атрибутов идентификатора это компаньон. В этом случае я знаю, что у каждого входа будет только одна метка.
Учитывая элемент ввода в javascript - например, через событие onkeyup - как лучше всего найти связанный с ним ярлык?
javascript
html
label
Джоэл Кохорн
источник
источник
function getInputLabel(thisElement) { var theAssociatedLabel,elementID; elementID = thisElement.id; theAssociatedLabel = thisElement.parentNode.querySelector("label[for='" + elementID + "']"); console.log('theAssociatedLabel.htmlFor: ' + theAssociatedLabel.htmlFor); theAssociatedLabel.style.backgroundColor = "green";//Set the label background color to green };
Ответы:
Сначала просканируйте страницу на предмет ярлыков и назначьте ссылку на ярлык из фактического элемента формы:
Затем вы можете просто перейти:
Нет необходимости в поисковом массиве :)
источник
Если вы используете jQuery, вы можете сделать что-то вроде этого
Если вы не используете jQuery, вам придется искать метку. Вот функция, которая принимает элемент в качестве аргумента и возвращает связанную метку
источник
В стандарте HTML5 есть
labels
свойство, которое указывает на метки, связанные с элементом ввода.Итак, вы можете использовать что-то вроде этого (поддержка собственного
labels
свойства, но с резервным вариантом для получения меток на случай, если браузер не поддерживает его) ...Еще проще, если вы используете jQuery ...
источник
Я немного удивлен, что, кажется, никто не знает, что вам вполне разрешено :
Который не подхватит ни один из предложенных ответов, но будет правильно маркировать вход.
Вот код, который учитывает этот случай:
Использование:
Некоторые примечания:
aria-labelledby
если бы вы использовали это (оставлено в качестве упражнения для читателя).источник
for
атрибут вlabel
элементе всегда будет .Ранее...
Потом...
Язвительный комментарий: Да, вы также можете сделать это с помощью JQuery. :-)
источник
document.querySelector ("метка [для =" + vHtmlInputElement.id + "]");
Это дает самый простой и краткий ответ на вопрос. Это использует ванильный javascript и работает во всех основных браузерах.
источник
с jquery вы можете сделать что-то вроде
источник
Если вы хотите использовать querySelector (а можете даже до IE9, а иногда и до IE8!), Другой метод становится жизнеспособным.
Если у вашего поля формы есть идентификатор, и вы используете
for
атрибут label , это становится довольно просто в современном JavaScript:Некоторые отметили несколько ярлыков; если все они используют одно и то же значение для
for
атрибута, просто используйтеquerySelectorAll
вместоquerySelector
и выполните цикл, чтобы получить все, что вам нужно.источник
Все остальные ответы сильно устарели !!
Все, что вам нужно сделать, это:
HTML5 уже много лет поддерживается всеми основными браузерами. Нет абсолютно никаких причин, по которым вам придется делать это с нуля самостоятельно или заполнять его полифиллами! Буквально просто используйте,
input.labels
и он решит все ваши проблемы.источник
input.labels
не поддерживается IE или Edge, а Firefox только что добавил поддержку.Это помогло мне получить метку элемента ввода по его идентификатору.
источник
Ответ от Gijs был для меня самым ценным, но, к сожалению, расширение не работает.
Вот переписанное расширение, которое работает, может кому-то помочь:
источник
Действительно краткое решение, использующее такие функции ES6, как деструктуризация и неявный возврат, чтобы превратить его в удобный однострочный лайнер, будет:
Или просто получить одну метку, а не NodeList:
источник
На самом деле гораздо проще добавить идентификатор к метке в самой форме, например:
Затем вы можете просто использовать что-то вроде этого:
Для работы javascript должен быть включен в функцию загрузки тела.
Просто мысль прекрасно работает на меня.
источник
Как уже упоминалось, ответ (на данный момент) с самым высоким рейтингом не учитывает возможность встраивания ввода внутри метки.
Поскольку никто не опубликовал ответ без JQuery, вот мой:
В этом примере для простоты поисковая таблица напрямую индексируется входными элементами HTML. Это вряд ли эффективно, и вы можете адаптировать его по своему усмотрению.
Вы можете использовать форму как базовый элемент или весь документ, если хотите получить метки сразу для нескольких форм.
Никаких проверок на неправильный HTML (множественные или отсутствующие входные данные внутри меток, отсутствующие входные данные с соответствующим htmlFor id и т. Д.) Не производятся, но вы можете их добавить.
Возможно, вы захотите обрезать текст меток, так как конечные пробелы часто присутствуют, когда ввод встроен в метку.
источник
Лучший ответ работает отлично, но в большинстве случаев перебирать все
label
элементы излишне и неэффективно .Вот эффективная функция для получения того,
label
что идет сinput
элементом:Для меня этой одной строчки кода было достаточно:
В большинстве случаев,
label
будет очень близко или рядом с входом, что означает, что цикл в приведенной выше функции должен повторяться очень небольшое количество раз.источник
пробовали ли вы использовать document.getElementbyID ('id'), где id - это идентификатор метки или ситуация, когда вы не знаете, какой из них вы ищете
источник
Используйте селектор JQuery:
источник
Для будущих искателей ... Ниже приводится jQuery-версия принятого ответа FlySwat:
С помощью:
источник
for
петля закончиласьeach()
? ПочемуhtmlFor
вместоattr("for")
?Я знаю, что это устарело, но у меня были проблемы с некоторыми решениями, и я собрал все вместе. Я тестировал это в Windows (Chrome, Firefox и MSIE) и OS X (Chrome и Safari) и считаю, что это самое простое решение. Он работает с этими тремя стилями прикрепления этикеток.
Используя jQuery:
Мой JSFiddle: http://jsfiddle.net/pnosko/6PQCw/
источник
Я сделал для себя, может кому-то пригодится: JSFIDDLE
источник
Я немного удивлен, что никто не предлагает использовать метод отношений CSS?
в таблице стилей вы можете ссылаться на метку из селектора элементов:
если у флажка есть идентификатор «XXX», тогда ярлык будет найден через jQuery по:
Вы также можете применить .find ('+ label'), чтобы вернуть метку из элемента флажка jQuery, то есть полезно при цикле:
источник