jQuery在.each中找到以前的元素标签

时间:2015-03-25 15:24:34

标签: javascript jquery

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

3 个答案:

答案 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;
}
});

Fiddle updated

答案 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));
});

JSFiddle

答案 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);
    }        
});

http://jsfiddle.net/mp4sdfvy/10/