【发布时间】:2020-02-01 13:39:21
【问题描述】:
我需要将<span> 拖放到<p>。我的代码有效,但我有 3 个问题,
当我通过键入某些内容(假设三个单词)编辑
<p>内容并将<span>拖动到<p>后,新键入的单词充当一个单词。所以不能在那些新输入的内容之间放置可拖动的组件。关闭后,添加的可拖动组件(通过点击
X)两个单词之间留有两个空格。无法将可拖动组件作为段落的 1 个单词放置。
为了整理第 3 期,我将&nbsp; 添加到第 1 段。并且已排序。
<p class="given" contenteditable="true"> Lorem Ipsum is simply dummy</p>
如何解决其他两个问题?请帮忙
$(function() {
function textWrapper(str, sp) {
if (sp == undefined) {
sp = [0, 0];
}
var txt = "<span class='w'>" + str + "</span>";
if (sp[0]) {
txt = " " + txt;
}
if (sp[1]) {
txt = txt + " ";
}
return txt;
}
function chunkWords(p) {
var words = p.split(" ");
words[0] = textWrapper(words[0], [0, 1]);
var i;
for (i = 1; i < words.length; i++) {
if (words[0].indexOf(".")) {
words[i] = textWrapper(words[i], [1, 0]);
} else {
words[i] = textWrapper(words[i], [1, 1]);
}
}
return words.join("");
}
function makeBtn(tObj) {
var btn = $("<span>", {
class: "ui-icon ui-icon-close"
}).appendTo(tObj);
btn.click(function(e) {
$(this).parent().remove();
});
}
function makeDropText(obj) {
return obj.droppable({
drop: function(e, ui) {
var txt = ui.draggable.text();
var newSpan = textWrapper(txt, [1, 0]);
$(this).after(newSpan);
makeBtn($(this).next("span.w"));
makeDropText($(this).next("span.w"));
$("span.w.ui-state-highlight").removeClass("ui-state-highlight");
},
over: function(e, ui) {
$(this).add($(this).next("span.w")).addClass("ui-state-highlight");
},
out: function() {
$(this).add($(this).next("span.w")).removeClass("ui-state-highlight");
}
});
}
$("p.given").html(chunkWords($("p.given").text()));
$("span.given").draggable({
helper: "clone",
revert: "invalid"
});
makeDropText($("p.given span.w"));
});
p.given {
display: flex;
flex-wrap: wrap;
}
p.given span.w span.ui-icon {
cursor: pointer;
}
div.blanks {
display: inline-block;
min-width: 50px;
border-bottom: 2px solid #000000;
color: #000000;
}
div.blanks.ui-droppable-active {
min-height: 20px;
}
span.answers>b {
border-bottom: 2px solid #000000;
}
span.given {
margin: 5px;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.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>
<div class="row">
<p class="given" contenteditable="true">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
</div>
<div class="divider"></div>
<div class="section">
<section>
<div class="card blue-grey ">
<div class="card-content white-text">
<div class="row">
<div id="walkinDiv" class="col s12">
<span class="given btn-flat white-text red lighten-1" rel="1">the Santee, thDakota</span>
<span class="given btn-flat white-text red lighten-1" rel="2">America</span>
<span class="given btn-flat white-text red lighten-1" rel="3">Qatar</span>
<span class="given btn-flat white-text red lighten-1" rel="4">Philippines</span>
</div>
</div>
</div>
</div>
</section>
</div>
更新日期:2019 年 10 月 22 日
我更新了问题,因为当我从代码生成可拖动组件<span> 时遇到问题。我生成的可拖动组件如下,它生成精细且能够拖放到<p>。但是当我单击<p> 并从<p>(这意味着在模糊事件中)在外部单击时,丢弃的组件没有显示关闭按钮。它显示为[Ameriaca] , [Qatatr] 为什么会这样?我怎样才能避免它。我在$(function() {}); 中调用了这个GetAllParameters()
function GetAllParameters() {
$.ajax({
type: "POST",
url: SERVER_PATH + '/service/TestService.asmx/GetAllParameters',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: GetAllNotificationParametersComplete,
error: GetAllNotificationParameterFailed
});
}
function GetAllNotificationParametersComplete(result, status) {
NotificationParameters = JSON.parse(result.d);
getTemplateparameters(NotificationParameters,'ShowIn');
}
function GetAllNotificationParameterFailed(result) {
//console.log(result);
}
function getTemplateparameters(data,field) {
var filtered = data.filter(function(item) {
return item[field] == true;
});
populateTemplateParameters(filtered);
}
function populateTemplateParameters(data) {
var obj = data;
var stringlist = "";
$.each(obj, function (index, item) {
stringlist = stringlist + ' <span class="given btn-flat white-text red lighten-1 parameter-wrapper">' +item.ParameterName+ '</span>';
});
$("#walkinDiv").html(stringlist);
$("span.given").draggable({
helper: "clone",
revert: "invalid"
});
makeDropText($("p.given span.w"));
}
更新日期:2019 年 10 月 23 日
前面提到的问题是当可拖动组件有"Hello World"这样的两个词和一个我识别出来的。当我在可编辑的<p> 中键入内容并单击<p> 的外部键入的单词时,这是一个大问题。请帮我解决这个问题
【问题讨论】:
-
@Rory McCrossan 你能看看这个
标签: javascript jquery jquery-ui jquery-ui-draggable