【问题标题】:jQuery find the previous elements label in .eachjQuery 在 .each 中查找之前的元素标签
【发布时间】:2015-03-25 15:24:33
【问题描述】:

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

【问题讨论】:

  • 您在选择器中忘记了inquiry-ref_checklabel = $('label[for=inquiry-ref_check"' + $(this).attr('id') + '"]').text();
  • 似乎您正在寻找 jquery 对象的最接近或父母方法,这将允许您浏览在 DOM 中输入的祖先中找到的第一个
  • @JeremyThille 我想要全部,这只是众多输入元素之一。
  • @Louis 我都试过了,但都没有得到预期的结果。
  • 你能用你试过的方法更新你的问题和 jsfiddle 吗?

标签: javascript jquery


【解决方案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

【讨论】:

  • 这正是我所需要的。谢谢@bviale
【解决方案2】:

如果我正确理解了这个问题,它会是这样的:

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

【讨论】:

    【解决方案3】:

    这是一个解决方案,必须稍微修改一下 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/

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多