2013-01-03 44 views
1

我有一個指令中的鏈接功能,我有一個切換功能來編輯當前活動的DOM元素的CSS內容。我如何訪問該DOM元素的父類或子類。使用角度j訪問DOM元素的兄弟姐妹

指令的一部分:

link: function(scope, element, attrs) { 

     var title = angular.element(element.children()[0]), 
      opened = true; 

     title.bind('click', toggle); 

     function toggle() { 
      opened = !opened; 
       element.removeClass(opened ? 'closed' : 'opened');     
       element.addClass(opened ? 'opened' : 'closed'); 
      element.siblings().removeclass('opened').addclass('closed'); // What to do here 

     } 
+0

更好的將發表您的相關代碼 –

+0

意味着Currentlty活躍DOM元素的兄弟姐妹...... – Adithya

+0

您可以編輯你的問題,你知道... – asgoth

回答

1

我會改變你的鏈接功能,這一點:

link: function(scope, element, attrs) { 
    var title = angular.element(element.children()[0]), 
     opened = true; 

    title.bind('click', toggle); 

    function toggle() { 
     opened = !opened; 
     element.parent().children().addClass("closed"); 
     element.parent().children().removeClass("opened"); 
     element.toggleClass("opened", opened); 
     element.toggleClass("closed", !opened); //might be redundantdepending on the rest of your code 

    } 
} 

我認爲你在錯誤的順序做,如果先取出/添加你需要的所有類,然後修改元素,你會得到你的結果。只需選擇父元素,然後獲取所有父元素。 .children()僅選擇父級的直接後代,而類似的.find()方法將遍歷層級。取決於是否有其他方式關閉元素,冗餘代碼可能不是必需的。

+0

感謝@MatthewBerg的建議......我會仔細看看:) – Adithya

+0

如果我已經爲其中一個子元素設置了「關閉」類,那麼我該怎麼做......即,如果函數切換已經發生了該元素,那麼封閉類將已經存在... > element.parent()。children()。addClass(「closed」); 然後我不會再添加「關閉」類 – Adithya

+0

不,它只會離開1個關閉類。如果一個元素已經有了一個類,並且你試圖再次添加它,它將不會重複它。 –