У меня есть эта программа, которая динамически перетаскивает <div></div>'s
. Я пытаюсь удалить любой перетаскиваемый <div></div>
, когда он попадает на id="trash" <div></div>
Я пытался сделать что-то подобное, но он просто удаляет корзину:
$(function() {
var trash = document.getElementById('trash');
$(trash).droppable({
drop: function( event, ui ) {
$(this).remove("div");
}
});
});
Я пытался определить, что <div></div>
упал, но не знал, как это сделать.
Вот мой полный код:
function addElement () {
var text = document.getElementById("input").value;
// create a new div element and give it a unique id
var newDiv = document.createElement("div");
newDiv.id = 'temp'
// and give it some content
var newContent = document.createTextNode(text);
// add the text node to the newly created div
newDiv.appendChild(newContent);
// add the newly created element and its content into the DOM
var currentDiv = document.getElementById("div1");
document.body.insertBefore(newDiv, currentDiv);
$(function() {
var td = document.getElementsByTagName('td');
var div = document.getElementsByTagName('div');
$(div).draggable();
$("#temp").draggable();
$(td).droppable({
drop: function( event, ui ) {
$( this )
.addClass("div")
.html( text );
$("div").draggable();
$( "#temp" ).remove();
}
});
});
document.getElementById("input").value = " ";
$(function () {
$("td").dblclick(function (e) {
e.stopPropagation();
var currentEle = $(this);
var value = $(this).html();
updateVal(currentEle, value);
});
});
function updateVal(currentEle, value) {
$(currentEle).html('<input class = "thVal" type = "text" value = "' + text + '" />');
$(".thVal").focus();
$(".thVal").keyup(function (event) {
if (event.keyCode == 13) {
$(currentEle).html($(".thVal").val().trim());
}
});
$(document).click(function () {
$(currentEle).html($(".thVal").val().trim());
});
}
}
var div = document.getElementsByClassName('div');
$( "td" ).hover(
function() {
$( this ).append( $( "<button>Delete</button>" ) ).attr('id', 'melement');
function dump() {
$(this).parent().html("").removeClass("div");
}
$( "#melement button" ).on( "click", dump );
}, function() {
$( this ).find( "button" ).last().remove();
}
);
$(function() {
var trash = document.getElementById('trash');
$(trash).droppable({
drop: function( event, ui ) {
$(this).remove("div");
}
});
});
body{
font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
}
div {
text-align: center;
border: 1px solid #d3d3d3;
width: 100px;
padding: 10px;
cursor: move;
z-index: 10;
background-color: #2196F3;
color: #fff;
}
.blank {
}
.div {
text-align: center;
padding: 10px;
cursor: move;
background-color: #2196F3;
color: #fff;
}
td{
border: 1px solid #d3d3d3;
padding: 10px;
height: 20px ;
width: 200px;
}
.div:hover {
background-color: yellow;
}
.trash {
background-color: red;
height: 100px;
width: 100px;
}
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width">
<title>repl.it</title>
<script src = "https://code.jquery.com/jquery-3.5.0.js"></script>
<link href = "style.css" rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel = "stylesheet" href = "/resources/demos/style.css">
<script src = "https://code.jquery.com/jquery-1.12.4.js"></script>
<script src = "https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<h1>Input text:</h1>
<input id = "input" type = "text" placeholder = "input">
<button onclick = "addElement()" >input</button>
<div id = "trash" class = "trash">Trash Can</div>
<script src = "script.js"></script>
</body>
</html>
Используя ui.draggable[i].remove()
, вы можете получить элемент, перетаскиваемый внутри этой функции, используя цикл for. Прокрутите объект ui.draggable и используйте увеличенную переменную в цикле for i
в качестве ключа для нацеливания на выбранный перетаскиваемый элемент.
Обновлено: добавлен цикл for для перебора элементов ui.draggable, чтобы нацелиться на элемент, который перетаскивается, когда добавлено более одного перетаскиваемого элемента. Также я бы изменил вашу функцию, которая добавляет идентификатор в созданный div, содержащий текстовый элемент, созданный для объединения числа с идентификатором, иначе у вас будут идентичные идентификаторы при добавлении более одного текстового элемента.
$(function() {
var trash = document.getElementById('trash');
$(trash).droppable({
drop: function(event, ui) {
for (let i = 0; i < ui.draggable.length; i++) {
ui.draggable[i].remove();
}
}
});
});
В своем вопросе вы удаляете событие с помощью $(this)
, которое является мусорным ведром.
function addElement() {
var text = document.getElementById("input").value;
// create a new div element and give it a unique id
var newDiv = document.createElement("div");
newDiv.id = 'temp'
// and give it some content
var newContent = document.createTextNode(text);
// add the text node to the newly created div
newDiv.appendChild(newContent);
// add the newly created element and its content into the DOM
var currentDiv = document.getElementById("div1");
document.body.insertBefore(newDiv, currentDiv);
$(function() {
var td = document.getElementsByTagName('td');
var div = document.getElementsByTagName('div');
$(div).draggable();
$("#temp").draggable();
$(td).droppable({
drop: function(event, ui) {
$(this)
.addClass("div")
.html(text);
$("div").draggable();
$("#temp").remove();
}
});
});
document.getElementById("input").value = " ";
$(function() {
$("td").dblclick(function(e) {
e.stopPropagation();
var currentEle = $(this);
var value = $(this).html();
updateVal(currentEle, value);
});
});
function updateVal(currentEle, value) {
$(currentEle).html('<input class = "thVal" type = "text" value = "' + text + '" />');
$(".thVal").focus();
$(".thVal").keyup(function(event) {
if (event.keyCode == 13) {
$(currentEle).html($(".thVal").val().trim());
}
});
$(document).click(function() {
$(currentEle).html($(".thVal").val().trim());
});
}
}
var div = document.getElementsByClassName('div');
$("td").hover(
function() {
$(this).append($("<button>Delete</button>")).attr('id', 'melement');
function dump() {
$(this).parent().html("").removeClass("div");
}
$("#melement button").on("click", dump);
},
function() {
$(this).find("button").last().remove();
}
);
$(function() {
var trash = document.getElementById('trash');
$(trash).droppable({
drop: function(event, ui) {
for (let i = 0; i < ui.draggable.length; i++) {
ui.draggable[i].remove();
}
}
});
});
body {
font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
}
div {
text-align: center;
border: 1px solid #d3d3d3;
width: 100px;
padding: 10px;
cursor: move;
z-index: 10;
background-color: #2196F3;
color: #fff;
}
.blank {}
.div {
text-align: center;
padding: 10px;
cursor: move;
background-color: #2196F3;
color: #fff;
}
td {
border: 1px solid #d3d3d3;
padding: 10px;
height: 20px;
width: 200px;
}
.div:hover {
background-color: yellow;
}
.trash {
background-color: red;
height: 100px;
width: 100px;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width">
<title>repl.it</title>
<script src = "https://code.jquery.com/jquery-3.5.0.js"></script>
<link href = "style.css" rel = "stylesheet" type = "text/css" />
<link rel = "stylesheet" href = "//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel = "stylesheet" href = "/resources/demos/style.css">
<script src = "https://code.jquery.com/jquery-1.12.4.js"></script>
<script src = "https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<h1>Input text:</h1>
<input id = "input" type = "text" placeholder = "input">
<button onclick = "addElement()">input</button>
<div id = "trash" class = "trash">Trash Can</div>
<script src = "script.js"></script>
</body>
</html>
Добавлен цикл for для перебора элементов пользовательского интерфейса.
Вам нужно получить элемент, который вы хотите удалить.
Это можно взять из параметра event
, который вы передаете в обратном вызове droppable
.
$(trash).droppable({
drop: function( event, ui ) {
$(event.toElement).remove();
}
});`
event.toElement
получает элемент, который вы отбрасываете. Тогда вы просто можете вызвать remove
на него.
Это потенциально может привести к сбою, когда вы создаете два (или более) элемента с одним и тем же идентификатором - это как раз текущий случай. Каждый элемент создается с идентификатором temp'.