jQuery在.each中查找前面的元素标签

jQuery find the previous elements label in .each

本文关键字:元素 标签 前面 查找 each jQuery      更新时间:2023-09-26

我有一个带有输入项的表单。我所做的是为表单中的每个输入元素获取标签。我已经这样做了,但我遇到的麻烦是。。。对于每个没有标签的输入元素,我想将它们的标签设置为上一个标签。我在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/

相关文章: