拖拽draggable和droppable的光标移动到最末尾
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拖拽draggable和droppable的光标移动到最末尾相关的知识,希望对你有一定的参考价值。
参考技术A `function setEndOfContenteditable(ele)
let range = ''
let selection = ''
if (document.createRange)
range = document.createRange() // 创建一个范围(范围类似于选择但不可见)
range.selectNodeContents(ele) // 选择具有范围的元素的全部内容
range.collapse(false)// 将范围折叠到终点。false表示崩溃要结束而不是开始
selection = window.getSelection() // 获取选择对象(允许您更改选择)
selection.removeAllRanges() // 删除所有已进行的选择
selection.addRange(range) // 使刚刚创建的范围可见
else if (document.selection) // / IE 8及更低版本
range = document.body.createTextRange() // 创建一个范围(范围类似于选择但不可见)
range.moveToElementText(ele) // 选择具有范围的元素的全部内容
range.collapse(false) // 将范围折叠到终点。false表示崩溃要结束而不是开始
range.select() // 选择范围(使其成为可见选择
`
在拖拽的放置区`.contentEdit`触发**drop**方法的时候触发这个方法
`
$('.contentEdit').droppable(
drop: function(event, ui)
setEndOfContenteditable(event.target)
// $(event.target).focusEnd()
)
`
draggable jquery get start parent()元素
我想用jquery拖放项目。
现在我有一个包含多个项目的“存储”。
在另一个网站上我有x个盒子。每个盒子只能包含1个项目。
现在,我使用droppable函数在盒子上设置另一个类,只能添加1个盒子,它可用于:
$( ".droppable" ).droppable({
accept: ".draggable",
activeClass: "draghover",
drop: function( event, ui ) {
if($( this ).hasClass("droppable")) {
$( this ).removeClass("droppable").addClass( "droppable-");
}
} });
现在,当我将项目移回存储或另一个盒子时,我需要还原类。我用draggable.start函数尝试了这个,但我无法得到正确的父()
$( ".draggable" ).draggable({
revert: "invalid",
snap: ".droppable",
snapMode: "inner",
start: function( event, ui ) {
alert($( this ).parent().attr("Class"));
}
});
这将始终在第一次拖动之前返回起始位置。不是最新的立场。
存储看起来像:
<td valign="top" class="warenlager" bgcolor="grey" width="200">
<div class="draggable" class="bild ui-widget-content" id="s73-1">S</div>
<div class="draggable" class="bild ui-widget-content" id="s74-1">S</div>
</td>
盒子看起来像:
<td><div class="droppable" id="element 2"></div></td>
问候
答案
如果你想在从droppable中删除draggable元素之后恢复该框的类(这是我认为你要求的)然后使用out事件处理程序,所以现在代码看起来像:
$( ".droppable" ).droppable({
accept: ".draggable",
activeClass: "draghover",
drop: function( event, ui ) {
if($( this ).hasClass("droppable")) {
$( this ).removeClass("droppable").addClass( "droppable-");
}
},
out: function()
{
$(this).addClass("droppable").removeClass( "droppable-");
}
});
希望这可以帮助 :)
另一答案
你可以这样做(通过ES6):
// Create a class for dragged element
// I will create a new instance form this class when drag
function draggedElement(elementId, parentId) {
this.id = elementId,
this.parentId = parentId
};
// Array of dragged elements
// This array use for store dragged elements and their parent's id
var draggedElementList = [];
$('.draggable').draggable({
start: function(event, ui) {
// Store or update parent's id
updateDraggedElementList($(this).attr("id"), $(this).parent().attr("id"));
}
});
// This method used for update or store draaged elemens and their parent's id
function updateDraggedElementList(elementId, parentId) {
// Create new instance
var element = new draggedElement(elementId, parentId);
// Check element has already been added or not
var foundIndex = draggedElementList.findIndex(el => el.id == element.id);
if (foundIndex > -1)
draggedElementList[foundIndex] = element;
else
draggedElementList.push(element);
// Print dragged elements and their parents
printDraggedElements();
}
// I wrote this method for test
function printDraggedElements() {
for (var i = 0; i < draggedElementList.length; i++) {
console.log(draggedElementList[i].id);
console.log(draggedElementList[i].parentId);
}
}
另一答案
我知道这不是最近的,但是获取可拖动项的父元素的一种方法是在draggable上使用start事件。
$( ".draggable" ).draggable({
revert: "invalid",
snap: ".droppable",
snapMode: "inner",
start: function( event, ui ) {
alert(event.currentTarget.parentElement);
}
});
以上是关于拖拽draggable和droppable的光标移动到最末尾的主要内容,如果未能解决你的问题,请参考以下文章
如何使用jQuery Draggable和Droppable实现拖拽功能
如何使用jQuery Draggable和Droppable实现拖拽功能
如何使用jQuery Draggable和Droppable实现拖拽功能
如何使用jQuery Draggable和Droppable实现拖拽功能