我尝试使用delegate
和indexOf
方法获取YUI中的标签索引 - 具体来说,我想要删除内容中点击图片的标签 li 元素:
var tabView = new Y.TabView({
srcNode: '#data-table'
});
...
//creating tabs
...
var removeTab = function(e) {
var tabList = e.container.all('li'); //returns a list of the 'li' elements/tabs
tab = tabView.indexOf(e.currentTarget);
alert(tab); //returns -1 (node not found)
//tabView.remove(tab);
}
Y.one('#data-table').delegate('click', removeTab, 'img');//on click of the img, launch removeTab
我不相信YUI有一种更简单的方法 - 我发现的大多数指南已经过时或者没有以同样的方式删除标签。
答案 0 :(得分:1)
问题是委托处理程序是在img
元素上设置的 - 所以e.currentTarget
将引用<img>
元素(已被点击)。
但是,使用e.container.all('li')
,您可以检索<li>
元素的集合。当然,此集合中的任何元素都不能等于<img>
。这就是indexOf
失败的原因。
一种可能的解决方案是首先找到<li>
元素的<img>
父元素,然后检查其索引:
var liClicked = e.currentTarget.ancestor('li');
var tabIndex = tabList.indexOf(liClicked);