这是我的HTML:
<form>
<dl>
<dt> </dt>
<dd><input type="hidden"></dd>
<dt>Dont hide this one</dt>
<dd><input type="text"></dd>
</dl>
</form>
我正在使用jQuery隐藏使用此代码隐藏输入类型的dt
/ dd
元素:
$("input[type=hidden]").each(function() {
$(this).parent().hide().prev().hide();
});
但我也只想将其应用于文本为dt
的{{1}}。我怎么做这种选择?
更新:也许我需要澄清一下:在检查dt的内容是否也是
之前,有几个人在隐藏dd的地方发布了答案。在隐藏dt和dd之前,两个条件都必须为真。
最终解决方案:以下是我最终的结果:
答案 0 :(得分:3)
$("input[type=hidden]").filter(function() {
return $(this).parent().prev('dt').html() === " ";
}).each(function() {
$(this).parent().hide().prev().hide();
});
这不会选择<dt>foo bar</dt>
contains(' ')
会。
更简洁(信用Emil's answer)
$("input[type=hidden]").filter(function() {
return $(this).closest('dd').prev('dt').html() === " ";
}).closest('dd').hide().prev('dt').hide();
答案 1 :(得分:1)
使用contains选择器:
$("dt:contains(' ')").hide();
答案 2 :(得分:1)
$("input[type=hidden]").each(function() {
$(this).closest('dd').hide()
.prev('dt').hide();
});
此代码找到带有标记dd
的输入的最近父级,隐藏它,然后查找dt
兄弟并隐藏它。
答案 3 :(得分:0)
包含选择器与整个内容不匹配,因此它可能适合您,但不是理想的解决方案。正确的方法是使用过滤功能:
$('input[type=hidden]').filter(function() {
return $(this).prev().html() == ' '
})
.each(function() {
$(this).hide();
$(this).prev().hide();
});
答案 4 :(得分:0)
这也可以解决问题(改编自早期版本的cobbal的答案):
$("input[type=hidden]").each(function() {
if ($(this).parent().prev().filter(function() {
return $(this).html() === " ";
}).hide().length > 0) {
$(this).hide();
}
});