Javascript 如何比较angular元素和jQuery元素
我需要实现click outside以隐藏dropdown inside指令,因此我有以下代码: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) {
$(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;
});
}
}
});