【问题标题】:Add div on hover using jquery使用jquery在悬停时添加div
【发布时间】:2019-10-17 15:27:27
【问题描述】:

我构建了一个类似于“trip planner”的项目,但我需要在我克隆的 div 对象上添加一条带有 css 的左边框垂直线:

.line
  { width:5px, height:200px; background:red;}

所以要成为 like this(悬停时可以看到一条垂直线)

我试图用代码做到这一点:

$(function() {
    //$( ".draggable" ).resizable();
    $( ".draggable" ).draggable({
      revert: 'invalid', 
      helper:"clone",
      snap: "#drop_here td", 
      opacity: 0.7
    });
    $( "#drop_here td" ).droppable({
      // accept only from left div, 
      // this is necessary  to prevent clones duplicating inside droppable
      accept: '#left .draggable',
      drop: function( event, ui ) {
        // 4 append clone to droppable
        $( this ).append(
          // 1 clone draggable helper
          $(ui.helper).clone()

          // 2 make the clone draggable
          .draggable({
             containment:"#table",
            snap: "#drop_here td" 
          })
          // 3 make the clone resizable
          .resizable());

//HERE IS MY PROBLEM IN CODE
        $(".draggable").hover(function() {
    $(this).append("<div class='line'></div>");
}, function() {
    $(this).removeClass("line");
});
      }
    });
  });

但不工作!

DEMO

【问题讨论】:

  • 伙计它正在工作..检查代码..
  • 不,悬停时的垂直线不会显示

标签: javascript jquery html css jquery-ui


【解决方案1】:

第一个问题是你的css 有一个, 插入一个;

.line { 
  display: none;
  width: 5px; 
  height: 200px;
  background: red;
}

然后为jquery修改如下:

$('.draggable').hover(function(){
    $(this).find('.line').show();
}, function() {
    $(this).find('.line').hide();
});

在你的标记中放置一个.line(只有一个一个)只是after每个.draggable,但不是hover或者它会append它每次你hover .draggable 创造了大量的.lines

JSfiddle:http://jsfiddle.net/steo/JB7jN/1/

【讨论】:

  • 非常干净的解决方案:)
  • 但我只需要克隆对象......再次是一样的
  • 老兄,您缺少将 .line 添加到可拖动的内容,我在我链接的那个中做到了,并且效果很好。 jsbin.com/erofot/157看这段代码
【解决方案2】:

您必须像这样在准备好的文档中绑定 .hover():

$(document).ready(function(){
      $(".draggable").hover(function() {
          $(this).append("<div class='line'></div>");
      }, function() {
          $(this).children('.line').remove();
      });
});

【讨论】:

  • steo 的答案并不正确。它会显示和隐藏所有带有“line”类的元素。但一开始就没有。我只是复制了你的代码,但在 mouseout 中处理程序你不应该只删除线元素的类,使用 $(this).children('.line').remove();反而。我为你更新了我的第一篇文章。
  • 不,你的方法不正确:你每次都会创建一个行 div,这是一个不好的方法,我会修复我的代码。
  • 你可以在鼠标悬停时轻松创建 dom 元素,只要你在 mouseout 时移除它们。
  • 不,还不错.. 这是一个很好的解决方案,创建和删除 dom 元素没有问题。这就是 javascript 的用途.. dom 操作。
  • 当您不需要时,这是一种糟糕的方式。只是我的两分钱。
【解决方案3】:

您的“悬停”处理程序会从 $(this) 中删除该类,而不是从附加的子项中删除。

在悬停时动态创建元素可能是不好的做法,这些元素永远不会被删除,并且可能会逐渐用垃圾填充文档。

【讨论】:

    【解决方案4】:

    如果您只想将行添加到克隆中,请将 start 属性添加到可拖动选项中,如下所示:

    $( ".draggable" ).draggable({
      revert: 'invalid', 
      helper:"clone",
      snap: "#drop_here td", 
      opacity: 0.7,
      start: function(event, ui){
        var clone = $(ui.helper);
        if (clone.children('div.line').length == 0)
            clone.append("<div class='line'></div>");
      }
    });
    

    对此进行了测试,它就像一个魅力.. 不要忘记删除这部分:

        $(".draggable").hover(function() {
             $(this).append("<div class='line'></div>");
        }, function() {
             $(this).removeClass("line");
        });
    

    【讨论】:

    • 好吧,它就在这里.. 我现在将它保存为模板.. 或者我应该怎么做?我对 jsbin 并不了解..
    • 继续 BINS 然后 CLONE 然后复制链接并粘贴到这里
    • 我不知道..元素在那里..并且仅在克隆中..请标记为答案..您的 css 可能有问题..或者尝试输入' ' (非破坏空间)在 div 中
    • 好的,我会标记答案,但如果您可以通过电子邮件发送此代码,请发送给我:mslavko6@gmail.com ...
    • 继续 BINS / DOWNLOAD 并发送到电子邮件 mslavko6@gmail.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多