jQuery在.each中查找前面的元素标签
jQuery find the previous elements label in .each
我有一个带有输入项的表单。我所做的是为表单中的每个输入元素获取标签。我已经这样做了,但我遇到的麻烦是。。。对于每个没有标签的输入元素,我想将它们的标签设置为上一个标签。我在jsFiddle中做了一个我想要的模型。
myItems.each(function(){
label = $('label[for="' + $(this).attr('id') + '"]').text();
if(label.length <= 0){
// code I'm looking for goes here
}
});
更新:我更新了JSFiddle,以显示我试图实现的目标和使用.prve()的尝试的真实表示。JSFiddleLINK
这是我在不使用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;
}
});
Fiddle更新
如果我正确理解这个问题,它会是这样的:
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));
});
JSFiddle
这里有一个解决方案,必须对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);
}
});
http://jsfiddle.net/mp4sdfvy/10/