使用jquery </dd>删除<dt>而不使用</dt> <dd>

时间:2009-12-24 10:06:55

标签: jquery html jquery-selectors

我有一个定义列表,我需要删除所有没有<dt>的{​​{1}}代码 在这个特殊情况下:Herramientas,Suplementos,Repuestos,Herramientas和Anti pinchaduras

该列表可能会有很大差异,因为它依赖于股票(任何类别<dd>都可能为空)

我试过这个

<dt>

但它删除了“partes”而不是“herramientas”并且未能删除“suplementos” 也尝试使用$('dt+dt').each(function() { $(this).remove(); }); ,但似乎没有dd的dt不被认为是空的......

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

示例列表:

:empty

4 个答案:

答案 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();
  }
});