jQuery 在 .each 中查找之前的元素标签
Posted
技术标签:
【中文标题】jQuery 在 .each 中查找之前的元素标签【英文标题】:jQuery find the previous elements label in .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_check
:label = $('label[for=inquiry-ref_check"' + $(this).attr('id') + '"]').text();
似乎您正在寻找 jquery 对象的最接近或父母方法,这将允许您浏览在 DOM 中输入的祖先中找到的第一个
@JeremyThille 我想要全部,这只是众多输入元素之一。
@Louis 我都试过了,但都没有得到预期的结果。
你能用你试过的方法更新你的问题和 jsfiddle 吗?
【参考方案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/
【讨论】:
以上是关于jQuery 在 .each 中查找之前的元素标签的主要内容,如果未能解决你的问题,请参考以下文章
jQuery$.each循环遍历详解,各种取值对比,$.each遍历数组对象Dom元素二维数组双层循坏类json数据等等
jquery each() 怎么遍历到 我动态创建div 中的p标签中的内容 求解