我在HTML列表的树的树添加一个点击事件列出的项目,如本:在列表
<ul class="myTree">
<li class="treeItem">Category 1
<ul>
<li class="treeItem">Subcategory 1 1</li>
<li class="treeItem">Subcategory 1 2
<ul>
<li class="plus"><input type="text" value="Add a product"/></li>
</ul>
</li>
</ul>
</li>
<li class="treeItem">Category 2
<ul>
<li class="treeItem">Subcategory 1 1</li>
<li class="treeItem">Subcategory 1 2
<ul>
<li class="plus"><input type="text" value="Add a product"/></li>
</ul>
</li>
</ul>
</li>
</ul>
因此,大家可以看到,这是一个有点阐述名单。
现在我需要的是那些会检索相应名称(类别1,子类别11等)的那些“treeItem”类元素上的单击事件。
我想出了这一点:
$(".myTree").on("click", ".treeItem", function() {
var categoryName = $(this).text();
alert(categoryName);
});
我面对现在唯一的问题是,首先,categoryName
包含
Category 2
Subcategory 1 1
Subcategory 1 2
当我点击“等级1” <li>
(如类别1)。我可以通过在我的<li>
中添加一些catname
属性来避开这个问题,但最重要的是,当我点击“2级”<li>
(例如子类别11)时,它会首先在级别2上触发点击事件<li>
,然后在级别1上触发新的点击事件<li>
...
这很明显,它为什么会这样做,但我需要一种方法来让它只在最高级别出现一次(当我点击“子类别1 1 “,它不应该触发”类别1“的事件)。
还值得注意的是,这棵树会自动生成,这意味着我可以将我的treeItem
与其他类如“level1”或类似的东西贴在一起,但如果我能避免这种情况,我会喜欢它。
...好吧,因为我觉得我有点迷失了自己在它这个问题可能需要总结......
- 我需要在列表树click事件
- 我需要的单击事件只能在最高级别(最深)被解雇。
- 添加一些类名是可能的,但希望避免。
谢谢!
不错的答案Rory。 –
谢谢:)我真的不明白你的过滤器,但它的作品,所以我会说这样很好:P。 Thx为您提供帮助! –
没问题。 'contents'返回包含文本节点的给定元素的所有元素。 'filter'是删除前/后空格,然后它简单地返回第一个元素,在你的情况下是包含'Category x'字符串的文本节点。它看起来比它更复杂;) –