2

複数のオブジェクトを同時に操作できるように、DOM オブジェクトの配列を jQuery のセレクターに渡すことは可能だと思います。以下のようにしてみましたが、なぜかうまくいきません...

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

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

    });

実際にこれを行うことは可能ですか、それとも間違ったツリーを吠えていますか?

このjsFiddleをまとめてテストしました。目的は、30 分のスロットが選択される予約システムを作成することなので、「これ」と次の行の下のセルを操作する必要があります。

アドバイスをいただければ幸いです。

フィドルからのコード:

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();
4

3 に答える 3

3

jQuery オブジェクトの配列から jQuery オブジェクトを作成しています。あなたはそれをすることはできません、それはうまくいきません。

DOM 要素の配列を作成する必要がありSelます (注: 配列はインデックスがゼロなので、Sel[1]実際には 2 番目の要素ですが、配列を作成するときは、実際のキーを本当に.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)`
于 2012-08-13T15:49:25.877 に答える
2

jQuery オブジェクトの配列を使用しています。代わりに、DOM オブジェクトの配列が必要です。

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

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

しかし、それは と であるべきではありませんSel[0] = thisSel[1] = ...

于 2012-08-13T15:41:19.093 に答える
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/

于 2012-08-13T15:49:53.433 に答える