jquery 可排序 div 拖放文本不可由 ckeditor 编辑
jquery sortable div drag and drop text is not editable by ckeditor
我有以下源代码
$( function() {
$( "#sortable1, #sortable2" ).sortable({
connectWith: ".connectedSortable"
}).disableSelection();
} );
InlineEditor
.create( document.querySelector( '.editor' ) )
.catch( error => {
console.error( error );
});
#sortable1, #sortable2 {
border: 1px solid #eee;
width: 142px;
min-height: 20px;
list-style-type: none;
margin: 0;
padding: 5px 0 0 0;
float: left;
margin-right: 10px;
}
#sortable1 li, #sortable2 li {
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Sortable - Connect lists</title>
<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>
<body>
<p class="editor">Text edited by ckeditor outer sortable can edit by ckeditor</p>
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
<ul id="sortable2" class="connectedSortable">
<li class="ui-state-highlight editor">Text edited by ckeditor inside sortable can not edit by ckeditor</li>
<li class="ui-state-highlight">Item 2</li>
<li class="ui-state-highlight">Item 3</li>
<li class="ui-state-highlight">Item 4</li>
<li class="ui-state-highlight">Item 5</li>
</ul>
</body>
</html>
<script src="https://cdn.ckeditor.com/ckeditor5/17.0.0/inline/ckeditor.js"></script>
此连接的可排序拖放列表 build 由 jquery ui。我想通过 ckeditor 为每个可排序 <li>
元素文本编辑文本。但是使用上面的代码段,可排序项目的内部文本是不可编辑的。
我想 activity 是项目应该是可拖放和内联文本编辑。
如何更改可以编辑可排序项目文本的代码段?
您必须为您的 HTML 标签提供一个 id
属性,这可能是为了确保库不会错误地将您的标签与其他标签混淆。
更新:实现这种情况的最佳方法是将 sortable()
配置为禁用选项,在 dbclick()
后它将启用内联编辑器并禁用可排序选项,然后在 blur()
我们销毁内联编辑器并重新启用元素的排序功能。
我测试得不够多,所以您可能会遇到一些与 blur()
在 CKeditor 上未正确触发相关的错误,我会把它留给您。只需双击编辑器 <li>
元素,这将启用 CKeditor,然后再次在其中单击以显示编辑器,然后您可以单击页面中的任意位置以禁用编辑器并重新存储 sortable()
功能.
这是一个工作片段。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Sortable - Connect lists</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<style>
#sortable1, #sortable2 {
border: 1px solid #eee;
width: 142px;
min-height: 20px;
list-style-type: none;
margin: 0;
padding: 5px 0 0 0;
float: left;
margin-right: 10px;
}
#sortable1 li, #sortable2 li {
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
</style>
<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>
<p class="editor">Text edited by ckeditor outer sortable can edit by ckeditor</p>
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
<ul id="sortable2" class="connectedSortable">
<li class="ui-state-highlight" id="editor">Text edited by ckeditor inside sortable can not edit by ckeditor</li>
<li class="ui-state-highlight">Item 2</li>
<li class="ui-state-highlight">Item 3</li>
<li class="ui-state-highlight">Item 4</li>
<li class="ui-state-highlight">Item 5</li>
</ul>
<!-- <div id="editor">
<p>this is test</p>
</div> -->
</body>
</html>
<script src="https://cdn.ckeditor.com/ckeditor5/17.0.0/inline/ckeditor.js"></script>
<script>
$( function() {
var myEditor;
$( "#sortable1, #sortable2" ).sortable({
connectWith: ".connectedSortable",
cancel: ".unsortable"
});
document.querySelector( '#editor' ).addEventListener('dblclick', function() {
$(this).addClass('unsortable');
myEditor = InlineEditor
.create( document.querySelector( '#editor' ) )
.catch( error => {
console.error( error );
}).then(editor => myEditor = editor)
});
document.querySelector( '#editor' ).addEventListener('blur', function() {
myEditor.destroy().then(editor => $(this).removeClass('unsortable'))
});
} );
</script>
我有以下源代码
$( function() {
$( "#sortable1, #sortable2" ).sortable({
connectWith: ".connectedSortable"
}).disableSelection();
} );
InlineEditor
.create( document.querySelector( '.editor' ) )
.catch( error => {
console.error( error );
});
#sortable1, #sortable2 {
border: 1px solid #eee;
width: 142px;
min-height: 20px;
list-style-type: none;
margin: 0;
padding: 5px 0 0 0;
float: left;
margin-right: 10px;
}
#sortable1 li, #sortable2 li {
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Sortable - Connect lists</title>
<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>
<body>
<p class="editor">Text edited by ckeditor outer sortable can edit by ckeditor</p>
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
<ul id="sortable2" class="connectedSortable">
<li class="ui-state-highlight editor">Text edited by ckeditor inside sortable can not edit by ckeditor</li>
<li class="ui-state-highlight">Item 2</li>
<li class="ui-state-highlight">Item 3</li>
<li class="ui-state-highlight">Item 4</li>
<li class="ui-state-highlight">Item 5</li>
</ul>
</body>
</html>
<script src="https://cdn.ckeditor.com/ckeditor5/17.0.0/inline/ckeditor.js"></script>
此连接的可排序拖放列表 build 由 jquery ui。我想通过 ckeditor 为每个可排序 <li>
元素文本编辑文本。但是使用上面的代码段,可排序项目的内部文本是不可编辑的。
我想 activity 是项目应该是可拖放和内联文本编辑。
如何更改可以编辑可排序项目文本的代码段?
您必须为您的 HTML 标签提供一个 id
属性,这可能是为了确保库不会错误地将您的标签与其他标签混淆。
更新:实现这种情况的最佳方法是将 sortable()
配置为禁用选项,在 dbclick()
后它将启用内联编辑器并禁用可排序选项,然后在 blur()
我们销毁内联编辑器并重新启用元素的排序功能。
我测试得不够多,所以您可能会遇到一些与 blur()
在 CKeditor 上未正确触发相关的错误,我会把它留给您。只需双击编辑器 <li>
元素,这将启用 CKeditor,然后再次在其中单击以显示编辑器,然后您可以单击页面中的任意位置以禁用编辑器并重新存储 sortable()
功能.
这是一个工作片段。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Sortable - Connect lists</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<style>
#sortable1, #sortable2 {
border: 1px solid #eee;
width: 142px;
min-height: 20px;
list-style-type: none;
margin: 0;
padding: 5px 0 0 0;
float: left;
margin-right: 10px;
}
#sortable1 li, #sortable2 li {
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
</style>
<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>
<p class="editor">Text edited by ckeditor outer sortable can edit by ckeditor</p>
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
<ul id="sortable2" class="connectedSortable">
<li class="ui-state-highlight" id="editor">Text edited by ckeditor inside sortable can not edit by ckeditor</li>
<li class="ui-state-highlight">Item 2</li>
<li class="ui-state-highlight">Item 3</li>
<li class="ui-state-highlight">Item 4</li>
<li class="ui-state-highlight">Item 5</li>
</ul>
<!-- <div id="editor">
<p>this is test</p>
</div> -->
</body>
</html>
<script src="https://cdn.ckeditor.com/ckeditor5/17.0.0/inline/ckeditor.js"></script>
<script>
$( function() {
var myEditor;
$( "#sortable1, #sortable2" ).sortable({
connectWith: ".connectedSortable",
cancel: ".unsortable"
});
document.querySelector( '#editor' ).addEventListener('dblclick', function() {
$(this).addClass('unsortable');
myEditor = InlineEditor
.create( document.querySelector( '#editor' ) )
.catch( error => {
console.error( error );
}).then(editor => myEditor = editor)
});
document.querySelector( '#editor' ).addEventListener('blur', function() {
myEditor.destroy().then(editor => $(this).removeClass('unsortable'))
});
} );
</script>