Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找转置指令的子元素,但排除其自己的嵌套指令子元素_Javascript_Jquery_Angularjs_Dom_Angularjs Directive - Fatal编程技术网

Javascript 查找转置指令的子元素,但排除其自己的嵌套指令子元素

Javascript 查找转置指令的子元素,但排除其自己的嵌套指令子元素,javascript,jquery,angularjs,dom,angularjs-directive,Javascript,Jquery,Angularjs,Dom,Angularjs Directive,假设我有以下代码:(Plunkr:) directiveA和directiveB是两种不同的转置指令。我们关注的是directiveA,directiveB,它只是表示可以有另一个指令,而不是directiveA 每个directiveA如何仅查找和修改自己的标记元素?换句话说,在这种情况下,directiveA#1如何只能查找和修改3个a标记,directiveA#2和directiveA#3如何只能查找和修改自己的1个a标记 请参阅plunkr了解我的尝试,但到目前为止还没有成功。请检查

假设我有以下代码:(Plunkr:)


directiveA
directiveB
是两种不同的转置指令。我们关注的是
directiveA
directiveB
,它只是表示可以有另一个指令,而不是
directiveA

每个
directiveA
如何仅查找和修改自己的标记元素?换句话说,在这种情况下,
directiveA#1
如何只能查找和修改3个a标记,
directiveA#2
directiveA#3
如何只能查找和修改自己的1个a标记


请参阅plunkr了解我的尝试,但到目前为止还没有成功。

请检查这是否对您有帮助

var-app=angular.module('plunker',[]);
应用程序控制器('MainCtrl',函数(){
var vm=这个;
});
app.directive('directiveA',function($timeout){
返回{
链接:功能(范围、元素){
//要用作筛选器的类名
var className='aClass';
//将适当的元素ID收集到其中的数组
var collectedds=[];
//demarking边界-所有directiveA都将添加此类
元素addClass(类名);
//启动收集过程
导线(元件);
//打印结果
console.log('scope a',scope.id,collectedId);
/**
*负责从当前开始遍历DOM树
*元素收集感兴趣元素的ID。
*
*本案中的利益要素包括:
*“当前节点中不具有类“aClass”的所有子体”
*/
函数遍历(元素){
angular.forEach(元素.children(),函数(c){
//包装dom元素
var child=角度元素(c);
//当前子级是否为所需/有效类型
if(有效删除(子项)){
var childId=child.attr('id');
if(childId){
//正在收集当前元素的id
collectedId.push(childId);
}
//在当前元素子元素上递归
导线测量(儿童);
}
});
}
/**
*负责决定当前元素
*是一种需要遍历的类型。
*/
函数isValidElement(元素){
return!element.hasClass(className);
}
},
限制:'E',
范围:{
id:“=”
},
是的,
替换:正确,
模板:“”
}
});
app.directive('directiveB',function(){
返回{
限制:'E',
作用域:{},
是的,
替换:正确,
模板:“”
}
});
*{
列表样式类型:无;
}

控制台中的结果示例:
  • 范围a 3:[5]
  • 范围a 2:[4]
  • 范围a 1:[1,2,3,6]
<directive-a id="1">
  <a href="">1</a>
  <a href="">1</a>

  <directive-b>
    <a href="">1</a>
  </directive-b>

  <directive-a id="2">
      <a href="">2</a>

      <directive-a id="3">
        <a href="">3</a>
      </directive-a>

    </directive-a>

</directive-a>