Joe*_*orn 100 html javascript label
假设我有一个html表单.每个input/select/textarea都将对应<label>的for属性设置为其伴随的id.在这种情况下,我知道每个输入只有一个标签.
给定javascript中的输入元素 - 例如通过onkeyup事件 - 找到它的关联标签的最佳方法是什么?
Ton*_*nyB 100
如果你使用jQuery,你可以做这样的事情
$('label[for="foo"]').hide ();
Run Code Online (Sandbox Code Playgroud)
如果您不使用jQuery,则必须搜索标签.这是一个将元素作为参数并返回关联标签的函数
function findLableForControl(el) {
var idVal = el.id;
labels = document.getElementsByTagName('label');
for( var i = 0; i < labels.length; i++ ) {
if (labels[i].htmlFor == idVal)
return labels[i];
}
}
Run Code Online (Sandbox Code Playgroud)
Fly*_*wat 81
首先,扫描页面中的标签,并从实际表单元素中分配对标签的引用:
var labels = document.getElementsByTagName('LABEL');
for (var i = 0; i < labels.length; i++) {
if (labels[i].htmlFor != '') {
var elem = document.getElementById(labels[i].htmlFor);
if (elem)
elem.label = labels[i];
}
}
Run Code Online (Sandbox Code Playgroud)
然后,你可以简单地去:
document.getElementById('MyFormElem').label.innerHTML = 'Look ma this works!';
Run Code Online (Sandbox Code Playgroud)
不需要查找数组:)
ale*_*lex 26
HTML5标准中有一个labels属性,它指向与输入元素关联的标签.
所以你可以使用这样的东西(支持原生labels属性,但是如果浏览器不支持它,可以使用后备来检索标签)...
var getLabelsForInputElement = function(element) {
var labels = [];
var id = element.id;
if (element.labels) {
return element.labels;
}
id && Array.prototype.push
.apply(labels, document.querySelector("label[for='" + id + "']"));
while (element = element.parentNode) {
if (element.tagName.toLowerCase() == "label") {
labels.push(element);
}
}
return labels;
};
// ES6
var getLabelsForInputElement = (element) => {
let labels;
let id = element.id;
if (element.labels) {
return element.labels;
}
if (id) {
labels = Array.from(document.querySelector(`label[for='${id}']`)));
}
while (element = element.parentNode) {
if (element.tagName.toLowerCase() == "label") {
labels.push(element);
}
}
return labels;
};
Run Code Online (Sandbox Code Playgroud)
如果你使用jQuery更容易...
var getLabelsForInputElement = function(element) {
var labels = $();
var id = element.id;
if (element.labels) {
return element.labels;
}
id && (labels = $("label[for='" + id + "']")));
labels = labels.add($(element).parents("label"));
return labels;
};
Run Code Online (Sandbox Code Playgroud)
Gij*_*ijs 23
我有点惊讶,似乎没有人知道你完全被允许这样做:
<label>Put your stuff here: <input value="Stuff"></label>
Run Code Online (Sandbox Code Playgroud)
哪个不会被任何建议的答案选中,但会正确标记输入.
以下是一些将此案例考虑在内的代码:
$.fn.getLabels = function() {
return this.map(function() {
var labels = $(this).parents('label');
if (this.id) {
labels.add('label[for="' + this.id + '"]');
}
return labels.get();
});
};
Run Code Online (Sandbox Code Playgroud)
用法:
$('#myfancyinput').getLabels();
Run Code Online (Sandbox Code Playgroud)
一些说明:
aria-labelledby你如何使用它(作为练习留给读者).Tom*_*lak 14
此前...
var labels = document.getElementsByTagName("LABEL"),
lookup = {},
i, label;
for (i = 0; i < labels.length; i++) {
label = labels[i];
if (document.getElementById(label.htmlFor)) {
lookup[label.htmlFor] = label;
}
}
Run Code Online (Sandbox Code Playgroud)
后来...
var myLabel = lookup[myInput.id];
Run Code Online (Sandbox Code Playgroud)
Snarky评论:是的,您也可以使用JQuery.:-)
Lui*_*ico 10
document.querySelector(“ label [for =” + vHtmlInputElement.id +“]”);
这以最简单,最精简的方式回答了这个问题。这使用香草javascript,并且可以在所有主流主流浏览器上使用。
用jquery你可以做点什么
var nameOfLabel = someInput.attr('id');
var label = $("label[for='" + nameOfLabel + "']");
Run Code Online (Sandbox Code Playgroud)
所有其他答案都非常过时!!
您所要做的就是:
input.labels
Run Code Online (Sandbox Code Playgroud)
多年来,所有主要浏览器都支持 HTML5。绝对没有理由你必须自己从头开始或 polyfill 它!从字面上看,只需使用input.labels它即可解决您的所有问题。