Javascript jQuery多个。最近的不工作

Javascript jQuery多个。最近的不工作,javascript,jquery,closest,Javascript,Jquery,Closest,我试图在单击事件时获取第二个li的attr数据uid值 jQuery代码: $(document).on('click', 'ul li ul li ul li div.k-bot', function(){ alert($(this).closest('li.k-item').attr('data-uid')); //its giving first one's data-uid alert($(this).closest('li.k-item').closest('li.k-

我试图在单击事件时获取第二个li的attr数据uid值

jQuery代码:

$(document).on('click', 'ul li ul li ul li div.k-bot', function(){
    alert($(this).closest('li.k-item').attr('data-uid')); //its giving first one's data-uid
    alert($(this).closest('li.k-item').closest('li.k-item').attr('data-uid')); //its also giving first one's data-uid
});
Html代码:

<ul class="k-group" role="group">
    <li role="treeitem" class="k-item" data-uid="104321c5-b0bd-4225-8804-38467ac111bf" data-expanded="true" aria-expanded="true">
        <div class="k-top">
            AAAAAAAAAAAAAAAAAA
        </div>
        <ul class="k-group" style="display: block; overflow: visible; height: auto;" role="group">
            <li role="treeitem" class="k-item k-last" data-uid="05ca21d3-cc54-40c2-b3cb-6dde8299a1d7" aria-selected="true">
                <div class="k-bot">
                    BBBBBBBBBBBBBBBB
                </div>
                <ul class="k-group" style="display:none" role="group">
                    <li role="treeitem" class="k-item k-last" data-uid="ffb02246-030b-4264-87c7-68030e25d6e4">
                        <div class="k-bot">
                            CCCCCCCCCCCCCC
                        </div>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>
为什么会这样

从最接近的:

对于集合中的每个元素,获取与 通过测试元素本身并向上遍历其 DOM树中的祖先

第一个最近项的结果本身就是li.k-item,因此后续调用与之匹配。改用这个:

$(this).closest('li.k-item').parent().closest('li.k-item').attr('data-uid')

使用委派更容易阅读,因此您不需要如此庞大的选择器列表:

$(document).on('click', '#myid', '.k-bot', function(e){
    console.log($(e.target).parent().attr('data-uid')); 
});

小提琴手:

你试过了吗?父母?还是兄弟姐妹?请添加一个fiddleul li div.k-bot<-过度杀戮!使用更独特的类或其他东西,这是一种可怕的选择元素的方法。是否有可能两个.k-bot元素都触发了事件处理程序?由于选择器的原因,这真的很难说。顺便说一句,这是非常糟糕的-而不是ul-li-ul-li等,给某个根元素一个id或类,然后从那里获取它。@Novocaine是的,我知道,实际上这是剑道ui树视图。它是动态生成的。我只是将一个javascript对象传递给它。非常好,谢谢。你能澄清我的疑问吗?在这个$this.closest'li.k-item'中,它将给出第一个父级li.k-item。如果我使用另一个最接近它,它应该给我第二个家长一个。你是说这和我一样吗。我们在内联中的一个元素上调用多个函数。比如$this.html.show.addClass'XYZ'