【问题标题】:Delete option for the dropped list item删除列表项的删除选项
【发布时间】:2018-08-16 05:20:50
【问题描述】:

我使用以下 HTML 和 Javascript 将列表项从一个 div 拖放到另一个 div。

HTML:

<div class="listArea">
   <h4> Drag and Drop list in Green Area: </h4>
   <ul class="unstyle">
      <li id="drag1" draggable="true" (dragstart)="drag($event)">
          i am list 1
      </li>
      <li id="drag2" draggable="true" (dragstart)="drag($event)">
          i am list 2 
      </li>
      <li id="drag3" draggable="true" (dragstart)="drag($event)">
          i am list 3
      </li>
      <li id="drag4" draggable="true" (dragstart)="drag($event)">
          i am list 4
      </li>
   </ul>
</div>
<div class="buildArea" id="div1" (drop)="drop($event)" (dragover)="allowDrop($event)">
   <h4> Drop Here </h4> 
</div>

Typescript 包含以下内容:

  allowDrop(ev) {
    ev.preventDefault();
  }

  drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
  }

  drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data).cloneNode(true));
  }

stackblitz 链接是 https://stackblitz.com/edit/angular-wyimor

我需要的是在我将列表项放入具有buildArea 类的 div 之后,可以删除列表项,即我需要为每个删除的项生成唯一的删除按钮,并且单击该按钮,必须删除当前列表。

从给定的 Demo 中删除绿色区域中的下拉列表项的选项需要完成。 我还需要只使用 pure javascript 并且 jquery 需要被忽略。

经过长时间的搜索,我找不到任何解决方案,因此请帮助我实现删除已删除列表项的期望输出。

【问题讨论】:

    标签: javascript html angular typescript drag-and-drop


    【解决方案1】:

    试试这样的:

    DEMO

      <div class="listArea">
        <h4> Drag and Drop list in Green Area: </h4>
        <ul class="unstyle">
            <li *ngFor="let li of List; let i = index" id="drag{{i}}" draggable="true" (dragstart)="drag($event, i) ">
                i am list {{li.name}}
            </li>
        </ul>
    </div>
    
    
        <div class="buildArea " id="div1 " (drop)="drop($event) " (dragover)="allowDrop($event) ">
            <h4> Drop Here </h4>
    
            <ul class="unstyle">
                <li *ngFor="let li of DraggedList; let i = index" id="dragged{{i}}">
                    <p>{{li.innerHTML}}</p>
                    <button (click)="deleteItem(i)" type="button"> X</button>
    
                </li>
            </ul>
        </div>
    

    TS:

    List: Array<any> = [
        { name: 1 },
        { name: 2 },
        { name: 3 },
        { name: 4 },
        { name: 5 },
      ]
      elId: number;
    
      DraggedList: Array<any> = [
    
      ]
    
      allowDrop(ev) {
        ev.preventDefault();
      }
    
      drag(ev, i) {
        this.elId = i;
        ev.dataTransfer.setData("text", ev.target.id);
      }
    
      drop(ev) {
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        // ev.target.appendChild(document.getElementById(data).cloneNode(true));
        this.DraggedList.push(document.getElementById(data));
      }
    
      deleteItem(i) {
        if (i > -1) {
          this.DraggedList.splice(i, 1);
        }
      }
    

    【讨论】:

    • 如果我从我给出的代码中的ev.target.appendChild(document.getElementById(data).cloneNode(true)); 行中删除.cloneNode(true),您的解决方案将起作用,为什么会有这么多的解决方法?但我需要的是在删除后我必须创建一个删除选项来删除绿色区域中的已删除列表项。与可拖动项无关..
    • 我已经这样做了,因为它可以为每个元素动态生成一个唯一的 id。无需为每个指定。如果你想放按钮,你可以使用比
    • 没关系,但我只需要删除我想要的所有已删除列表..而且也不需要删除可拖动项目..
    • 知道了..你想为每个拖动的项目添加删除按钮吗(在绿色框中可用)??
    • 是的,但是在拖动列表中不需要任何删除按钮,唯一的事情是在放入绿色列表后必须进行删除。场景是用户可能错误地删除了列表以便删除它我需要那个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多