选择一个元素数组并使用它们

时间:2011-10-19 13:47:43

标签: javascript jquery arrays

使用以下语法:

var position = array($('#ipadmenu > section').attr('data-order'));

我无法让我的代码工作。我之前从未使用过数组,所以我很失落如何使用它们。 (特别是在jquery中)。

如何创建所有section元素的数组,并将data-order的值与该列表相关联。例如:

first section - data-order:1
second section - data-order:2

等然后使用该信息。

谢谢!

3 个答案:

答案 0 :(得分:2)

由于.attr只获取一个属性 - the first one found by the jQuery selector - 您需要按元素构建数组元素。一种方法是.each(您也可以使用.data来提取数据属性):

var position = new Array;
$('#ipadmenu > section').each(function() {
    position.push($(this).data('order'));
});

alert(position[0]);  // alerts "1"

这将是一个索引数组,而不是关联数组。要构建其中一个(在JavaScript中,在技术上是一个对象,而不是任何类型的数组),只需更改.each循环的内部部分:

var position = {};
$('#ipadmenu > section').each(function(i) {
    position["section"+i] = $(this).data('order');
});

现在可以访问生成的对象position,如:

alert(position['section1']); // alerts "1"

另一种方法涉及使用jQuery.map,但由于这只适用于数组而不是jQuery对象,因此您需要先使用jQuery.makeArray将您的选择转换为真正的数组:

var position = $.map($.makeArray($('#ipadmenu > section')), function() {
    return $(this).data('order');
} );  // position is now an indexed array

这种方法在技术上比使用.each更短,但我发现它不太清楚。

答案 1 :(得分:1)

Javascript:

var orders = [];
$('#ipadmenu > section').each(function() {
    orders.push($(this).data('order'))
});

HTML:

<div id="ipadmenu">
    <section data-order="1">1</section>
    <section data-order="2">2</section>
</div>

答案 2 :(得分:0)

你会想做这样的事情:

// Get the elements and put them in an array
var position = $('#ipadmenu section').toArray();
console.log(position);

// Loop through the array
for (var i = 0; i < position.length; i++){
  // Display the attribute value for each one
  console.log("Section " + i + ": " + $(position[i]).attr('data-order'));
}

这里的工作示例:http://jsfiddle.net/U6n8E/3/