我有一个定义列表,我需要删除所有 <dt>
没有任何 <dd>
的标签
在这种特殊情况下:Herramientas、Suplementos、Repuestos、Herramientas 和 Anti pinchaduras
列表可能因库存而异(任何类别 <dt>
都可能为空)
我试过了
$('dt+dt').each(function() {
$(this).remove();
});
但是它删除了“partes”而不是“herramientas”并且没有删除“supplementos”
也试过 :empty
但似乎没有 dd 的 dt 不被认为是空的......
一定有一个非常简单易行的解决方案,但我的大脑拒绝看到它:-(
示例列表:
<dl>
<dt>Bicicletas</dt>
<dd><a href="/bicicletas/">Bicicletas</a> (70)</dd>
<dt>Accesorios</dt>
<dd><a href="/accesorios/bocinas/">Bocinas, timbres y cornetas</a> (9)</dd>
<dd><a href="/accesorios/transporte/">Transporte y protección</a> (1)</dd>
<dt>Herramientas</dt>
<dt>Partes</dt>
<dd><a href="/partes/cubiertas/">Cubiertas</a> (2)</dd>
<dd><a href="/partes/asientos/">Asientos</a> (5)</dd>
<dd><a href="/partes/grips/">Puños / grips</a> (1)</dd>
<dt>Articulos de indumentaria</dt>
<dd><a href="/indumentaria/jerseys/">Jerseys / Remeras</a> (1)</dd>
<dd><a href="/indumentaria/cascos/">Cascos</a> (3)</dd>
<dt>Suplementos</dt>
<dt>Repuestos</dt>
<dt>Herramientas</dt>
<dt>Anti pinchaduras</dt>
</dl>
最佳答案
$('dt').filter(function(){
return !($(this).next().is('dd'));
}).remove();
在此处查看实际效果:http://jsbin.com/isute
这也可以,但是很奇怪,不会选择最后一个 <dt>
,所以我添加了另一个选择器:
$('dt + dt').prev().add('dt:last-child').remove();
即:全选<dt>
一个接一个<dt>
,选择上一个 dt,并添加最后一个。
另一种选择:
var good = $('dd').prev('dt');
$('dt').not(good).remove();
not
can take an array ,所以这有效。这也可以写成
$('dt').not($('dd').prev('dt')).remove();,但是非常难看。
关于jquery - 使用 jquery 删除没有 <dd> 的 <dt>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1957675/