【问题标题】:jQuery prevent one item from being dropped into another listjQuery防止一个项目被放入另一个列表
【发布时间】:2013-03-11 13:04:26
【问题描述】:

我有两个列表,每个列表都有一个唯一的 ID。我想知道如何防止 parent-parent 列出主要的从删除整个外部部分<div> 到 一个<li> <div>,它已经包含了一个自己的<ul> <li> 列表。此外,占位符也出现在那里。我想知道是否有一种方法可以强制属于第一个列表的项目留在那里,即使它们移动到另一个列表上方,并且在主全局列表中有一个项目。

提前致谢。

编辑:一些代码:

<ul id="main">
      <li>
           <div id="content"><p>Lorem ipsum...</p></div>
      </li>
      <li>
        <div id="Section1">
            <ul id="section-list">
                 <li><div id="item1"><h2>Hello World</h2><li>
                 <li><div id="item2"><h2>Hello World</h2><li>
            </ul>
        </div>
      </li>
   <ul>

jQuery:

$(document).ready(function () {
             $("#main").sortable({
                 connectWith: "#main",
                 placeholder: 'placeholder',
                 forcePlaceholderSize: true,
                 start: function (e, ui) {
                     var elementHeight = ui.item.height();
                     ui.placeholder.height(elementHeight);
                 }
             });

我的代码现在看起来像这样:

<script type="text/javascript">
         $(document).ready(function () {
             $('ul#main').sortable({
                 items: 'li:not(:last-child)',
                 placeholder: 'placeholder',
                 forcePlaceholderSize: true,
                 handle: '.grab-and-move-area',
                 start: function (e, ui) {
                     var elementHeight = ui.item.height();
                     ui.placeholder.height(elementHeight);
                 }
             });
         });
     </script>

编辑:用原始代码添加了最后一个 jsfiddle:

我复制了我所有的原创作品,这里是:http://jsfiddle.net/wt4N8/1/

编辑:有人可以告诉我为什么这不能正常工作吗?谢谢!

【问题讨论】:

  • 请提供一些代码...
  • 请创建一个 jsFiddle 来说明您的问题。 jsfiddle.net
  • 您知道,当您发布小提琴时,您至少可以确保您注意代码提示,以便您的 html 有效。您可能会包含您正在使用的 JS 库。这是您对包含的库和 html 更正的小提琴:jsfiddle.net/S3836/3 现在请按照您描述问题的方式进行操作。
  • 谢谢@dnagirl 我不能在这里产生同样的问题,jsfiddle.net/S3836/9 这个占位符不会出现在第二个 ul li 中,但是如果我将它移动到我的原作中有几乎相同的代码,占位符出现在第二个 ul 中的第一个 li 和第二个 li 之间,当我从第一个 ul 移动 li 时:(

标签: jquery html css jquery-ui-sortable


【解决方案1】:

我已经删除了你不必要的 html 标记并将你的 ul#main 包装在一个 &lt;div&gt; 这个 div 中,您可以将其中的所有 &lt;ul&gt;s 与 .sortable() 连接在一起。您的占位符显示,您可以将列表项从一个层次结构级别移动到另一个层次结构,包括创建一个新的子列表。

使用 jquery 1.8.3 和 jquery-ui 1.9.2,

html

<div id='sortablediv'>
  <ul id="main">
      <li id="content">
           Lorem ipsum..
      </li>
      <li id="Section1" class='section-head'>Section One
            <ul id="section-list1">
                <li id="item1">Hello World</li>
                <li id="item2">Hello Mars</li>
            </ul>
      </li>
      <li id="Section2" class='section-head'>Section Two
            <ul id="section-list2">
                <li id="item3">Goodbye World</li>
                <li id="item4">Goodbye Mars</li>
            </ul>
      </li>    
   <ul>
</div>

js

$(document).ready(function () {
             $("#sortablediv ul").sortable({
                 connectWith: "#sortablediv ul", //connect all uls with all other uls in #sortablediv
                 placeholder: 'placeholder'
             });
});

http://jsfiddle.net/S3836/18/

参考:http://a.shinynew.me/post/4641524290/jquery-ui-nested-sortables

【讨论】:

  • 感谢@dnagirl,但这并不能真正解决问题,我想在第一个 ul 中强制一个项目,并确保当我在其他 ul 的 li 标签之间移动它时不会出现占位符。 ..
  • @John Smith:好吧,占位符没有出现。因此,例如,您想将“Hello World”从第 1 部分中移出并使其成为 &lt;ul id='main'&gt; 的直接子代?
  • 它没有出现在这个例子中,但在我正在做的原始作品中不断出现,我不知道为什么?我一直在测试,但占位符仍然出现。
  • 每个
      都有不同的ID
    • @JohnSmith:您的原始示例包含无效的 html。所以 javascript 无法正常工作,因为它无法正确读取 DOM。你的&lt;li&gt;s 没有正确关闭并且它们充满了不必要的块元素,例如&lt;div&gt; 和'

      '。这就是为什么您的占位符在原始示例中存在问题的原因。

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多