26

我有一个很长的动态生成列表,每个列表都具有相同的类标识符和类似于以下代码的数据属性:

<ul>
    <li class="list" data-id="123">One</li>
    <li class="list" data-id="124">Two</li>
    <li class="list" data-id="125">Three</li>
    <li class="list" data-id="126">Four</li>
    .....etc
</ul>

我想要实现的是获取所有data-id值并将它们格式化如下:

123|124|125|126....etc

然后,这将通过 ajax 传递到页面,并检查 id 在数据库中是否存在。

var delimited_data="";
$('.list').each(function(){
    delimited_data+=$(this).data('id')+"|";
});
console.log(delimited_data);

我问这个问题的原因是我正在开发一个实时系统,该系统会在 10 分钟后自动将列表列中的项目部署给不同的用户。我只需要确保代码运行正确:)

我还需要检查页面上是否没有.list类(即 - 无法进行查询)是否delimited_data会完全为空,我很确定它会是。

有没有比.each()在这种情况下使用更好的方法,因为我发现它可能会相当慢,因为上面的函数将每 30 秒运行一次。

4

3 回答 3

61

您可以使用.map返回一个数组:

var dataList = $(".list").map(function() {
    return $(this).data("id");
}).get();

console.log(dataList.join("|"));

演示:http: //jsfiddle.net/RPpXu/

于 2013-06-27T15:01:40.000 回答
6

用这个:

var array = [];

$('li.list').each(function() {
  array.push($(this).data('id'));
})

var joined = array.join('|');
于 2013-06-27T15:05:01.040 回答
1

不是您问题的答案,但这是我最终在此页面上搜索的内容,尽管它会对其他人有所帮助:-)

var arrayOfObj = $('input').map(function() {

  return {
            name : $(this).attr('name'),
            data : $(this).data('options'),
            value : $(this).val(),
            id : $(this).attr('id')
         }

}).get();
console.log(arrayOfObj)

这将返回一个模仿输入
干杯的对象数组!

于 2014-03-14T16:13:55.513 回答