首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.parents()是角的?

.parents()是角的?
EN

Stack Overflow用户
提问于 2015-05-25 16:40:45
回答 4查看 19K关注 0票数 8

有什么方法可以模仿jQuery的.parents()方法的角度,而不必实际包括jQuery?

最后的目标是获取DOM元素的所有父元素。

编辑:为什么我需要这个?

我正在创建一个指令(一个类似下拉的小部件)。下拉列表应该侦听整个<body>的单击,如果在小部件区域外单击,则关闭自身(如果是打开的)。

现在,我知道如何创建一个简单的指令来侦听鼠标事件,比如这个:

代码语言:javascript
复制
app.directive('mouseTrap', function() {
  return function(scope, elem) {
    elem.bind('click', function(event) {
      scope.$broadcast('click', { event: event } );
    });
  };
});

然后,我会像这样使用...which:<body mouse-trap .... >

代码语言:javascript
复制
$scope.$on('click', function(msg, obj) {
  console.log("click!");
});

在这里,我需要检查单击对象的任何父级是否是我的小部件的顶级div,如果不是,则关闭小部件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-25 16:54:17

编辑:虽然这个答案被接受了,但它是不正确的。见下面的评论和更好的答案。

看起来jQLite已经支持这一点了,所以如果您使用的是角度,您应该能够做到这一点,而不需要拉进JQuery本身。

从docs 这里

受支持的实例方法:(指向jQuery文档的链接) jQuery支持的操作的子集目前正在实现。它们都是使用jQuery的链式操作语法来实现的。例如:

代码语言:javascript
复制
$("div.foo").each(function() {
  $(this).removeClass("foo").addClass("bar");

});

代码语言:javascript
复制
$("div.bar, div.baz").css({ "border": "1px solid red"    }).children().addClass("child");



.parent([selector)]
.parents([selector)] 
票数 -2
EN

Stack Overflow用户

发布于 2015-05-25 16:51:25

Angular的jqLite支持parent()方法,所以您可以让所有的父母都在这样的循环中:

代码语言:javascript
复制
var p = element.parent();
var allParents = [];
while (p.length > 0) {
    allParents.push(p[0]);
    p = p.parent();
}
票数 7
EN

Stack Overflow用户

发布于 2015-05-25 16:50:59

在尝试与角控制器接口时,我不确定您是否希望使用DOM父引用。但是,不知道您的目标是什么,标准方法.parentNode,才是您要寻找的。然后,您必须循环,直到您到达body,或者html,或null。因此,如果您想要本机javascript:

代码语言:javascript
复制
var currentParent = nodeToFindParentsOf.parentNode();
var parents = [];
while(currentParent){
  parents.push(currentParent);
  currentParent = currentParent.parentNode();
}

我也偏执于时间循环。所以倾向于用一个函数来包装整个事情,并在上面加一个安全阀,让我知道发生了什么,以防我的代码或DOM中出现疯狂,所以我会得到一个干净的错误,而不是锁定浏览器。

代码语言:javascript
复制
function getAllParentsOfNode (nodeToFindParentsOf) {
    var currentParent = nodeToFindParentsOf.parentNode();
    var parents = [];
    var safetyCount = 1000;
    while(currentParent){
      parents.push(currentParent);
      currentParent = currentParent.parentNode();
      if (--safetyCount  === 0) {
        throw new Error("Something went wrong. Found 1000+ parents!")
      }
    }

    return parents;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30442576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档