删除< dt>没有< dd>用jQuery [英] Delete <dt> without <dd> with jquery

查看:72
本文介绍了删除< dt>没有< dd>用jQuery的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个定义列表,我需要删除所有没有任何<dd><dt>标记 在这种特殊情况下:Herramientas,Suplementos,Repuestos,Herramientas和Anti pinchaduras

I have a definition list and I need to delete all the <dt> tags who doesn't have any <dd> In this particular case: Herramientas, Suplementos, Repuestos, Herramientas and Anti pinchaduras

该列表可能因存货而异(任何类别<dt>都可以为空)

The list can vary wildly because it's stock dependent (any category <dt> can get empty)

我尝试过

$('dt+dt').each(function() {
    $(this).remove();
});

但是它删除"partes"而不是"herramientas",并且无法删除"suplementos" 也尝试过使用:empty,但似乎没有dd的dt并不被认为是空的...

But it deletes "partes" instead of "herramientas" and fails to delete "suplementos" Also tried with :empty but it seems like a dt without a dd isn't considered empty...

必须有一个非常简单和容易的解决方案,但是我的大脑拒绝看到它:-(

There must be a extremely simple and easy solution but my brain refuses to see it :-(

示例列表:

<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

See it in action here: http://jsbin.com/isute

这也可以工作,但是很奇怪,并且不会选择最后一个<dt>,所以我添加了anothe选择器:

This can also work, but is weird, and will not select the last <dt>, so I've added anothe selector:

$('dt + dt').prev().add('dt:last-child').remove();

也就是说:选择所有另一个<dt>之后的所有<dt>,选择上一个dt,然后添加最后一个.

That is: select all <dt>s that are after another <dt>, select the prev dt, and add the last.

另一个选择:

var good = $('dd').prev('dt');
$('dt').not(good).remove();

not可以采用数组,因此可以正常工作.这也可以写成 $('dt').not($('dd').prev('dt')).remove();,但非常难看.

not can take an array, so this works. This can also be written as $('dt').not($('dd').prev('dt')).remove();, but is very ugly.

这篇关于删除&lt; dt&gt;没有&lt; dd&gt;用jQuery的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆