我有一个带输入项的表单。我所做的是获取表单中每个输入元素的标签。我已经完成了这个,但我遇到的麻烦就是这个...对于没有标签的每个输入元素我想将它们的标签设置为前一个标签。我在jsFiddle here中模拟了我正在寻找的东西。
myItems.each(function(){
label = $('label[for="' + $(this).attr('id') + '"]').text();
if(label.length <= 0){
// code I'm looking for goes here
}
});
更新:我更新了JSFiddle,以显示我想要完成的事情和使用.prev()的尝试的真实代表。 JSFIDDLE LINK
答案 0 :(得分:1)
这是我的解决方案,不使用jQuery.prev()
,因为您不知道前一个是否有标签(可能您需要在prev()之前的那个)。
var label = '';
var myItems = $('#panel').find('input');
var previousLabel;
myItems.each(function(){
label = $('label[for="' + $(this).attr('id') + '"]').text();
if(label.length <= 0) {
// ensure that a previous label exists
if (typeof(previousLabel) != 'undefined')
{
label = previousLabel;
// Here you can use your previous label
}
} else {
previousLabel = label;
}
});
答案 1 :(得分:1)
如果我正确理解了这个问题,那就是这样的:
var label, myItems = $('#panel input');
myItems.each(function(i, e){
var l = $('[for="'+e.id+'"]');
label = l.length ? l : label;
l.length || $(e).before(label.clone().attr('for', e.id));
});
答案 2 :(得分:0)
这是一个解决方案,不得不稍微修改一下HTML,这对你有用吗?
var myItems = $('#panel').find('input');
var label;
myItems.each(function(){
if($(this).parent().find('label').length){
label = $(this).parent().find('label');
} else {
var newLabel = document.createElement('label');
newLabel.innerHTML = label.html();
$(this).parent().prepend(newLabel);
}
});