我有一个定义列表,我需要删除所有没有<dt>
的{{1}}代码
在这个特殊情况下:Herramientas,Suplementos,Repuestos,Herramientas和Anti pinchaduras
该列表可能会有很大差异,因为它依赖于股票(任何类别<dd>
都可能为空)
我试过这个
<dt>
但它删除了“partes”而不是“herramientas”并且未能删除“suplementos”
也尝试使用$('dt+dt').each(function() {
$(this).remove();
});
,但似乎没有dd的dt不被认为是空的......
必须有一个非常简单易行的解决方案,但我的大脑拒绝看到它: - (
示例列表:
:empty
答案 0 :(得分:3)
$('dt').filter(function(){
return !($(this).next().is('dd'));
}).remove();
在此处查看此行动:http://jsbin.com/isute
这也可以,但很奇怪,并且不会选择最后一个<dt>
,所以我添加了另一个选择器:
$('dt + dt').prev().add('dt:last-child').remove();
即:选择另一个<dt>
之后的所有<dt>
,选择prev dt,然后添加最后一个。
另一种选择:
var good = $('dd').prev('dt');
$('dt').not(good).remove();
not
can take an array,这样可行。这也可以写成
$('dt')。not($('dd')。prev('dt'))。remove();,但非常难看。
答案 1 :(得分:2)
尝试这样的事情......
$('dt').each(function() {
if($(this).next('dd').length == 0){
$(this.remove();
}
});
答案 2 :(得分:0)
试试这个:
$('dl>dt').each(function() {
if ($(this).next("dd").length <= 0){
$(this).remove();
}
});
答案 3 :(得分:0)
这也适用于隐藏的<dd>
:
var $dl = $('dl'); // hook this up to your DL
$dl.find('dt').each(function() {
var $dt = $(this), $next = $dt.nextAll(':visible').slice(0,1);
// the next visible element is a dt OR there isn't another visible element.
if ($next.slice(0,1).is('dt') || $next.length == 0)
{
$dt.hide();
} else {
$dt.show();
}
});