【问题标题】:drag and drop between lines or paragraphs in contenteditable在 contenteditable 中的行或段落之间拖放
【发布时间】:2014-04-23 09:25:28
【问题描述】:

我正在尝试将内容拖放到我的 contenteditable 区域中。

<div contenteditable="true">
<p>some multiline paragraph
   paragraph</p>
<p>another multiline 
   paragraph</p>
<div class="draggable">DRAGGABLE</div>
</div>

结构同上,内容更多的html在http://jsfiddle.net/BQg7L/1

我想要的是我应该能够将“.draggable”元素拖放到段落&lt;p&gt;标签中。这是细节。 drop 应该以下列方式之一工作。

  1. draggable 只需要在段落的行之间被 DROPPED,当被拖放时,它应该在放置点将段落分成两个段落。并且被删除的元素应该在这两段之间。
  2. 或者,draggable 应该只放在段落的末尾(即,在结束 &lt;/p&gt; 标记之后),无论它被放在段落内的哪个位置。

感谢任何帮助。 jsfiddle 只有问题,没有 javascript 代码,因为我不知道如何开始。当我得到一些指示时,我会用 js 更新 jsfiddle。

【问题讨论】:

    标签: javascript jquery dom contenteditable content-editor


    【解决方案1】:

    这是 HTML 代码:

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
    <div class="drop_area" contenteditable="true">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eget luctus enim. Nunc varius bibendum accumsan. Donec pretium mi eget risus auctor, nec pulvinar libero blandit. Aenean feugiat dolor sit amet nisi sagittis mattis. Praesent lacus metus, aliquam vehicula enim eu, fringilla sollicitudin est.</p>
        <p>Cras ut turpis at diam auctor euismod. Maecenas in mauris erat. Maecenas sit amet tellus a augue dignissim fringilla. Proin auctor et quam sed tincidunt. Vivamus vehicula est id ligula lacinia, ac euismod dolor porta. </p>
        <p class="test_row" style="visibility: hidden"></p>
        <p class="new_row" style="visibility: hidden"></p>
        <!-- the below div should be draggable and can be dropped between lines in the above paragraphs. On drop, the paragraph should be split into two paragraphs and the div should be between these paragraphs -->
        <div class="draggable">DRAGGABLE</div>
    </div>
    

    和JS代码:

    $(document).ready(function(){
        $.each($( ".drop_area p" ), function(){
            var rows = parseInt($(this).height())/parseInt($(this).css('line-height'));
            var arr_words = $(this).text().split(' ');
            $('.new_row').html('');
            $.each(arr_words, function(){
                $('.test_row').text($('.test_row').text() + ' ' + this);
    
                if(parseInt($('.test_row').height())>parseInt($(".drop_area p").css('line-height'))){
    
                    $('.new_row').html($('.new_row').html() + '<span style="height: 1px; width: 100%;display: block"></span> ' + this);
                   $('.test_row').text('')
                }
                else $('.new_row').html($('.new_row').html() + ' ' + this);
            })
            $(this).html($('.new_row').html())
        })
        $( ".draggable" ).draggable({
                    appendTo: 'body',
                    cursorAt: { top: 0, left: 30 },
                    revert: 'invariant',
                    helper: 'clone'
                });
            $( ".drop_area p span" ).droppable({
            activeClass: "ui-state-default",
            hoverClass: "ui-state-hover",
            accept: ":not(.ui-sortable-helper)",
            over: function(event, ui) {
                   $(this).css('height','10px');
             },
            out: function(event, ui) {
                $(this).css('height','1px');
            },
            drop: function( event, ui ) {
             $(this).replaceWith('</p><p>')
    
    
            }
        })
    })
    

    您也可以查看结果here

    【讨论】:

    • 感谢@borza-adrian 的快速回复。但是,我无法看到它起作用。我在结果屏幕的最底部看到“DRAGGABLE”文本,它在 jsfiddle 中不可放置。我错过了一些明显的东西吗?感谢您的支持。
    • 您好,对不起,我没有看到它在 Chrome 上不起作用我改进了我的版本,所以它是:fiddle.jshell.net/BQg7L/79。最好的问候!
    • 出色的工作博尔扎。唯一缺少的部分是可拖动的文本在放置后打印了两次,并且在放置后失去了可拖动性。可拖动的文本在第一次放置后应该仍然是可拖动的。顺便说一句,我喜欢您通过查找行高为可放置区域插入&lt;span&gt; 的想法。这对我来说是最令人费解的事情。
    猜你喜欢
    • 2013-01-18
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2011-03-01
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多