簡體   English   中英

jQuery .prev()奇怪的行為

[英]jquery .prev() strange behavior

我有一個非常簡單的LI列表,它們都在同一級別上(沒有嵌套),我想找到任何類別為level1的元素的前一個元素。 由於某些原因,當'level1'元素相距一個以上時,prev()在項目上失敗。 我不想使用prevAll(),因為我只想要在我的元素之前並且具有class1類的最接近的li。

<ul id="main-list">
    <li class="level1" data-id="1" data-parent="none" id="recordsArray_1">Overview</li>
    <li class="level2" data-id="4" data-parent="Overview" id="recordsArray_4">Benefits</li>
    <li class="level2" data-id="2" data-parent="undefined" id="recordsArray_2">Core Concepts</li>
    <li class="level2" data-id="3" data-parent="undefined" id="recordsArray_3">Access</li>
    <li class="level3" data-id="5" data-parent="Access" id="recordsArray_5">Onboarding</li>
    <li class="level1" data-id="12" data-parent="none" id="recordsArray_12">test top</li>
    <li class="level2" data-id="10" data-parent="test top" id="recordsArray_10">test 1</li>
    <li class="level2" data-id="14" data-parent="undefined" id="recordsArray_14">New Access</li>
    <li class="level3" data-id="13" data-parent="New Access" id="recordsArray_13">test 2</li>
    <li class="level1" data-id="6" data-parent="none" id="recordsArray_6">Underview</li>
    <li class="level2" data-id="7" data-parent="Underview" id="recordsArray_7">coolpage1</li>
    <li class="level3" data-id="9" data-parent="coolpage1" id="recordsArray_9">page level 3</li>
</ul>

<script>
var publishList = $('#main-list li');

$.each(publishList, function () {
    var thisClass = $(this).attr('class');
    var parentID = $(this).attr('data-parent');
    var recordID = $(this).attr('data-id');

    if (thisClass == 'level2') {
        var thisParent = $(this).prev('.level1').html();
        console.log(this);    
    }
}); 
</script>

控制台輸出:

Overview
undefined
undefined
test top
undefined
Underview

我究竟做錯了什么? 我希望prev()返回有關核心概念,訪問權限和新訪問權限的概述,但它們回來后仍未定義。 我的邏輯有缺陷嗎?

嘗試的組合.prevAll().first()

var thisParent = $(this).prevAll('.level1').first().html();

這將確保無論距離多遠,您始終會獲得最接近的同級兄弟。

試試這個代碼

var publishList = $('#main-list li');

$.each(publishList, function () {
    var $this = $(this),
        thisClass = $this.attr('class'),
        parentID = $this.attr('data-parent'),
        recordID = $this.attr('data-id');

    if (thisClass == 'level2') {
        var thisParent = $this.prevAll('.level1').first().html();
        $('#output').append($this.prevAll('.level1').first().html()+'<br />');
    }

});

檢查小提琴

.prev()沒有提供您想要的功能。 您正在尋找的功能在.prevAll()

一旦你有一組值的.prevAll()你可以使用類似.first()來獲得你所需要的(如已經提到)或ID(識別最接近的元素,即.split()一個基於數字的ID或類似方法)。 但是,您決定執行此操作, .prev()不會為您提供所需的內容。

只需更新您的if語句

    if (thisClass == 'level2' && $(this).prev('.level1').length) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM