0

我有一个脚本,它计算无序列表中的项目数,并将项目拆分以创建两个单独的列表,但是该脚本运行的站点正在将其许多列表更改为定义列表,每个项目都有一个<dt><dd>元素。有没有办法找到<dt>它及其子<dd>元素并将它们视为单个元素。所以我可以找到并计算每一行

<dl>
  <dt>Title 1</dt><dd>Item 1</dd>
  <dt>Title 2</dt><dd>Item 2</dd>
</dl>

作为一个单一的实体?

编辑

这是目前适用于我的列表项的当前脚本,作为我试图实现的目标的一些指示。

$(document).ready(function() {
    $(function(){
    var $bigList = $('#bigList'),
    number = Math.round(($("li").size())/2),
    group;

    while((group = $bigList.find('li:lt(' + number + ')').remove()).length){
    $('<ul/>').append(group).appendTo('body');
    }
  });
});
4

3 回答 3

1

您可以使用适当的选择器来做到这一点:

$("dt + dd").length

但请注意,您只选择每个dd关注dt. dt所以这有利于计数,但如果您尝试应用样式或为and设置动画,它不会达到您的预期dd。但是,只需为这个其他用例做另一个选择。

于 2013-10-31T14:09:41.090 回答
1

您基本上需要计算dliedtddusing中的特定标签getElementsByTagName()

使用以下内容:

<dl id=dl1>
  <dt>Title 1</dt><dd>Item 1</dd>
  <dt>Title 2</dt><dd>Item 2</dd>
  <dt>Title 3</dt><dd>Item 3</dd>
  <dt>Title 4</dt><dd>Item 4</dd>
</dl>
<button onClick="alert(document.getElementById('dl1').getElementsByTagName('dt').length);">count_items</button>

检查这个演示

于 2013-10-31T14:16:43.833 回答
1

我想像下面这样的东西。您可能想要使用 slice 函数来获取后半部分而不是前半部分,并且可能将 ceil 更改为地板(向下舍入而不是向上舍入),但这是一个很好的起点。

$('#list2').append(
    $("#list1 > *").slice(0,
       Math.ceil($('#list1 dt').length/2) * 2
    )
);

http://jsfiddle.net/uKmJn/4/

于 2013-10-31T14:58:00.443 回答