2014-09-03 82 views
0

我有一个容器内的列表项div。结构如下所示:如何确定子元素是否在包含祖先之外?

<div id="container"> 
    <ul> 
    <li></li> 
    <li></li> 
    <li></li> 
    <li></li> 
    </ul> 
</div> 
我使用jQuery排序交换列表项

,如图所示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有一个滚动条。

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

+0

出方父ü意味着DOM结构或可视部分? – Sunand 2014-09-03 20:11:14

+0

外部父指含有id的容器在div外部拖动列表项。 – Donato 2014-09-03 20:11:53

+0

可能的重复:http://stackoverflow.com/questions/9403422 – PeterKA 2014-09-03 21:03:05

回答

0
$(".sortable").sortable({ 
    revert: true, 
    update: function(event, ui) { 
     if (ui.item.closest("#container").length) { 
      // inside container 
     } else { 
      // outside container 
     } 
    } 
}); 

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

+0

它似乎没有工作。即使在div外拖动列表项,else块也不会运行。 – Donato 2014-09-03 20:19:34

+0

我需要能够确定鼠标移出事件时的位置,因为jquery可排序会将元素捕捉回列表中。 – Donato 2014-09-03 20:24:36

+1

@DanStayntouch尝试将ui.item.closest(“#container”)'ui.item.closest(“#container”)'改为'ui.item.closest(“#container”)。返回true – Huangism 2014-09-03 21:02:10

相关问题