Во-первых, отсканируйте страницу для маркировок и присвойте ссылку на маркировку от фактического элемента формы:
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];
}
}
Затем можно просто пойти:
document.getElementById('MyFormElem').label.innerHTML = 'Look ma this works!';
Никакая потребность в массиве поиска :)
с jQuery Вы могли сделать что-то как
var nameOfLabel = someInput.attr('id');
var label = $("label[for='" + nameOfLabel + "']");
Вы попытались использовать document.getElementbyID ('идентификатор'), где идентификатор является идентификатором маркировки или является ситуацией, что Вы не знаете, какой Вы ищете
Ранее...
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;
}
}
Позже...
var myLabel = lookup[myInput.id];
Придирчивый комментарий: Да, можно также сделать это с JQuery.:-)
При использовании jQuery, можно сделать что-то вроде этого
$('label[for="foo"]').hide ();
, Если Вы не используете 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];
}
}