将数组传递给jQuery Selector

时间:2012-08-13 15:39:10

标签: jquery arrays selector

我相信可以将一个DOM对象数组传递给jQuery的选择器,这样你就可以同时操作多个对象。我试过这样做如下,但由于某种原因无法让它工作......

$(Sel).animate({
        backgroundColor: "#FF0000"
    }, 250, 'linear', function() {

        $(this).animate({
            backgroundColor: "#FFFFFF"
        }, 250, 'linear');

    });

实际上是否可以这样做,还是我咆哮错误的树?

我把this jsFiddle放在一起测试。目的是建立一个预订系统,选择半小时的时段,所以我需要操纵“这个”和下一行下面的单元格。

任何建议都非常感谢。

来自小提琴的代码:

function HighlightCells() {

    $('table#Calendar tbody tr td:not(".TimeCell")').live('mouseenter', function() {
        var Sel = new Array();
        Sel[1] = $(this);

        // Count number of previous TDs. Resut is base 0
        var NumIn = $(this).prevAll('td').length;

        // Increment count to compensate for nth-child being base 1
        NumIn++;

        var NextRow = $(this).closest('tr').next('tr');

        Sel[2] = $(NextRow).children("td:nth-child(" + NumIn + ")");

        // Animate the cell background colour red to white
        $(Sel).animate({
            backgroundColor: "#FF0000"
        }, 250, 'linear', function() {

            $(this).animate({
                backgroundColor: "#FFFFFF"
            }, 250, 'linear');

        });


        $('table#Calendar tbody td').live('mouseleave', function() {
            $(this).text("");
        });

    });

}

HighlightCells();

3 个答案:

答案 0 :(得分:3)

您正在从jQuery对象数组中创建一个jQuery对象。你不能这样做,它不起作用。

您需要使Sel成为DOM元素数组(注意:数组是零索引的,因此Sel[1]实际上是第二个元素,但在构建数组时,请使用.push除非你真的需要使用实际的密钥):

var Sel = [];  // this is preferred over `new Array()`
Sel.push($(this).get(0)); // or Sel.push(this)
// ...
Sel.push($(NextRow).children("td:nth-child(" + NumIn + ")").get(0));

或者使Sel成为一个jQuery对象,然后在其中添加元素。

var Sel = $();
Sel = Sel.add(this);
// ...
Sel = Sel.add($(NextRow).children("td:nth-child(" + NumIn + ")"));
// ...
Sel.animate({ // sel is already a jQuery object, so we don't need `$(Sel)`

答案 1 :(得分:2)

您正在使用jQuery对象数组。相反,您需要一个DOM对象数组。

var Sel = new Array();
        Sel[1] = this;

Sel[2] = $(NextRow).children("td:nth-child(" + NumIn + ")").get();

但是,不应该是Sel[0] = thisSel[1] = ...吗?

答案 2 :(得分:1)

你可以这样做

var Sel = new Array();
Sel[1] = this;

Sel[2] = NextRow.children("td:nth-child(" + NumIn + ")")[0]; 
//  retrieves the DOM element  
// Also no need to wrap NextRow with $() since it's already a jQuery object

http://jsfiddle.net/wirey00/AX3C8/27/