Javascript 如何比较angular元素和jQuery元素

Javascript 如何比较angular元素和jQuery元素,javascript,jquery,angularjs,angularjs-directive,Javascript,Jquery,Angularjs,Angularjs Directive,我需要实现click outside以隐藏dropdown inside指令,因此我有以下代码: $(document).click(function(e) { var selector = $(e.target).closest('.time-selector'); if (!selector.length) { // || !selector.is(element)) { if ($scope.$$phase) {

我需要实现click outside以隐藏dropdown inside指令,因此我有以下代码:

    $(document).click(function(e) {
        var selector = $(e.target).closest('.time-selector');
        if (!selector.length) { // || !selector.is(element)) {
            if ($scope.$$phase) {
                $scope.show = false;
            } else {
                $scope.$apply(function() {
                    $scope.show = false;
                });
            }
        }
    });
但当我点击不同的
时,它不起作用(不要隐藏)。计时器选择器
元素,我试着测试
!selector.is(element)
但这不起作用

那么,如何测试jQuery所选元素是否与angular指令元素是同一个DOM节点呢

不知道这是否相关,但我的指令没有
replace

尝试以下操作:

$(document).click(function(e) {
    var selector = $(e.target).closest('.time-selector');
    if (!selector.length) { // || !selector.is(element)) {
        // adjust this line here to get the scope where .show is defined
        var $scope = selector.scope();
        $scope.$apply(function() {
            $scope.show = false;
        });

    }
});

这可能有效,也可能无效,这取决于
selector.scope()
是否返回定义了“show”的范围。如果这不起作用,那么找到定义“show”的范围的元素,并在jQuery元素上调用.scope()以获取范围。

有趣的是,“元素”到底包含什么。如果是这样的话

<div id="foo"></div>

$jQueryObject[index]返回适当的HTMLElement。

找到了解决方案,在我的情况下,我的元素是我的指令标记,而不是
。时间选择器
,因此此代码解决了问题:

    $(document).click(function(e) {
        var selector = $(e.target).closest('.time-selector');
        if (!element.find('.time-selector').is(selector)) {
            if ($scope.$$phase) {
                $scope.show = false;
            } else {
                $scope.$apply(function() {
                    $scope.show = false;
                });
            }
        }
    });
元素是我的
,当存在
replace:true
时,我的代码可能会正常工作。
    $(document).click(function(e) {
        var selector = $(e.target).closest('.time-selector');
        if (!element.find('.time-selector').is(selector)) {
            if ($scope.$$phase) {
                $scope.show = false;
            } else {
                $scope.$apply(function() {
                    $scope.show = false;
                });
            }
        }
    });