我相信可以将一个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();
答案 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] = this
和Sel[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