【发布时间】:2020-01-31 00:03:21
【问题描述】:
我需要使用JQuery UI 创建一个可自定义的段落。
这是我的代码。
$(document).ready(function() {
var given = $("p.given").text();
var new_given = given.replace(/blank/g, ' <div class="blanks"></div> ');
$("p.given").html(new_given);
function updateDroppables() {
$("div.blanks").droppable({
accept: "span.given",
classes: {
"ui-droppable-hover": "ui-state-hover"
},
drop: function(event, ui) {
var dragedElement = ui.draggable.text();
var dropped = ui.draggable;
console.log(dropped);
dropped.hide();
console.log(dragedElement);
$(this).replaceWith(
" <span class='answers'><b class='blue-text' rel='" +
ui.draggable.attr("rel") +
"'>" +
dragedElement +
"</b> <a href='#' class='material-icons cancel md-16'>highlight_off</a></span> "
);
}
});
}
updateDroppables();
$("span.given").draggable({
helper: "clone",
revert: "invalid"
});
$(document).on("click", "a.cancel", function(e) {
e.preventDefault();
var rel = $(this).prev().attr('rel');
console.log(rel);
$(this)
.parent()
.replaceWith("<div class='blanks'></div>");
updateDroppables();
$('.btn-flat[rel=' + rel + ']').show();
});
});
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;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<p><b><i>In the text below some words are missing. Drag words from the box below to the appropriate place in the text. To undo an answer choice, drag the word back to the box below the text.</i></b></p>
<div class="row">
<p class="given">
He wants to get a better [blank] and earn more money. Managers set objectives, and decide [blank] their organization can achieve them. A defect can be caused [blank] negligen ce by one of the members of a team.
</p>
</div>
<div class="divider"></div>
<br>
<div class="section">
<section>
<div class="card blue-grey ">
<div class="card-content white-text">
<div class="row">
<div 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>
这可行,但问题是在上面的代码中,可拖动组件只能添加到[blank] 区域。我需要在段落<p> 的任何地方添加可拖动组件我该怎么做?我是code pen sample,你可以玩看看上面的代码是如何工作的
简单我把上面的代码改成如下,
$("p.given").droppable({
accept: "span.given",
classes: {
"ui-droppable-hover": "ui-state-hover"
}
但它将整个段落<p> 替换为拖动的组件。如何将可拖动组件添加到段落<p>标签的任何位置。
【问题讨论】:
-
只是澄清一下:您希望能够将可拖动的内容作为新段落插入到原始文本中的任何其他 2 个段落之间?
-
不请自来的迂腐:我们不使用 JavaScript 操作 标签。我们使用元素。在您的情况下,它是一个段落元素。标签就是在标记中定义元素的方式。
-
这里的主要问题是 Droppable 需要绑定到一个元素。这就是为什么它适用于空白而不适用于段落中的其他单词的原因。
[blank]模板被替换为空的<span>元素,然后它是可放置的。您需要将用户添加的文本转换为元素,很可能<span>然后可以成为可放置的目标。当用户将一个单词拖到 droppable 上时,它可以在目标之后追加新单词。 -
@LePhil 不,先生,我只需要将可拖动的内容拖放到段落的任何位置(原始文本)。简单地说我的要求和代码笔的例子一样。问题是它唯一的拖累
[blank]区域。我需要删除段落的任何地方
标签: javascript jquery html jquery-ui jquery-ui-draggable