起初,bind
是jQuery中的較新版本過時,使用on
代替。
第二,您可以將parent
保存在mousedown
事件中,並在mouseover
中檢查它。通過這種方式,您可以檢查td
是否與tr
相同。更新後的代碼可能是這樣的:
var isMouseDown = false, parent;
$("#mytable td").mousedown(function() {
var $this = $(this);
isMouseDown = true;
parent = $this.closest('tr').get(0);
$this.toggleClass("highlighted");
return false; // prevent text selection
}).mouseover(function() {
var $this = $(this);
if (isMouseDown && parent === $this.closest('tr').get(0)) {
$this.toggleClass("highlighted");
}
}).on("selectstart", function() {
return false; // prevent text selection in IE
});
JSFiddle
更新:
我已經更新了你的代碼。做了一些優化並添加了另一個解決方案,它只在mousedown
事件處理程序中添加了mouseenter
事件處理程序(而不是mouseover
)。此外,我添加了代碼以清除之前的選擇。
下面是最終的代碼和對應的JSFiddle:
var isMouseDown = false,
$cells = $('#mytable td');
$cells.on('mousedown', function() {
$cells.removeClass('highlighted'); // Clear previous selection
isMouseDown = true;
$(this)
.toggleClass('highlighted')
.siblings('td')
.on('mouseenter', onMouseEnter); // Add mouseenter event handler on siblings
return false;
}).on('mouseup', function() {
$(this).siblings('td').off('mouseenter'); // Remove mouseenter event handler from siblings
}).on('selectstart', function() {
return false;
});
// The onMouseEnter handler
function onMouseEnter() {
if (isMouseDown) {
$(this).toggleClass("highlighted");
}
}