【问题标题】:How to determine if a child element is outside the containing ancestor?如何确定子元素是否在包含的祖先之外?
【发布时间】:2014-09-03 20:07:57
【问题描述】:

我有一个容器div 内的列表项。结构如下:

<div id="container">
  <ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
</div>

我正在使用 jQuery sortable 交换列表项,如图here

我想确定列表项是否被拖到包含div之外,如果是,则将其删除。

我一直在尝试做的是使用offset() 来确定列表项与div 的距离,但它给了我不一致的结果:

$( ".sortable" ).sortable({
    revert: true,
    update: function( event, ui ) {
        console.log("difference: " + (parseInt($(ui.item).offset().top,10) - parseInt($("#importer-container").offset().top,10)) );
    }
});

有时会显示 1。有时会显示 26。容器 div 有一个滚动条,如果这很重要的话。

如何确定孩子是否在父母之外?

【问题讨论】:

标签: javascript jquery


【解决方案1】:
$( ".sortable" ).sortable({
    revert: true,
    update: function( event, ui ) {
        if (ui.item.closest("#container").length) {
            // inside container
        } else {
            // outside container
        }
    }
});

http://api.jquery.com/closest/

【讨论】:

  • 它似乎不起作用。即使将列表项拖到 div 之外,else 块也不会运行。
  • 我需要能够在鼠标移出事件时确定位置,因为 jquery 可排序元素会将元素捕捉回列表中。
  • @DanStayntouch 尝试将ui.item.closest("#container") 更改为ui.item.closest("#container").length,因为ui.item.closest("#container") 将始终返回true
猜你喜欢
  • 2021-07-31
  • 2013-06-30
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2014-09-15
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多