2016-04-14 4 views
0
<ul id="itemContainer"> 
<li data-number="1" style="display: none;"></li> 
<li data-number="2" style="display: none;"></li> 
<li data-number="3" style="display: list-item;"></li> 
<li data-number="4" style="display: list-item;"></li> 
<li data-number="5" style="display: list-item;"></li> 
</ul> 

Ich möchte den Wert der Daten-Anzahl der ersten und letzten Elemente von li mit Display bekommen: list-item so mit diesem Beispiel i 3 und 5Wie erhalten Sie die ersten und letzten Werte in jQuery mit einem bestimmten Stil?

if ($("#itemContainer>li").css('display') == 'list-item'){ 
    var first = parseInt($("#itemContainer>li").first().data("number"), 10); 
    var last = parseInt($("#itemContainer>li").last().data("number"), 10); 
    $("#itemContainer>li").hide().slice(first, last).show(); 
} 

im always 1 immer bekommen sollte und 5?

+0

Ihr Slice wird nicht die gewünschten Elemente auswählen, da die Zahlen bei "1" beginnen, aber "Slice" zählt von "0". – Barmar

+0

Warum benutzen Sie 'data-number' anstelle von' .index() '? Benötigen Sie die Zahlen, die sich von den nullbasierten Indizes unterscheiden? – Barmar

Antwort

1

Verwenden .filter() alle li mit display: list-item zu bekommen, dann .first() und .last() verwenden Sie die entsprechenden Elemente aus dieser Untergruppe auszuwählen.

var lis = $("#itemContainer>li").filter(function() { 
 
    return $(this).css('display') == 'list-item'; 
 
}); 
 
var first = lis.first().data("number"); 
 
var last = lis.last().data("number"); 
 
$("#itemContainer>li").hide().slice(first, last).show(); 
 
$("#first").text(first); 
 
$("#last").text(last);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="itemContainer"> 
 
    <li data-number="1" style="display: none;">1</li> 
 
    <li data-number="2" style="display: none;">2</li> 
 
    <li data-number="3" style="display: list-item;">3</li> 
 
    <li data-number="4" style="display: list-item;">4</li> 
 
    <li data-number="5" style="display: list-item;">5</li> 
 
</ul> 
 
First = <span id="first"></span><br> 
 
Last = <span id="last"></span>

BTW, brauchen Sie nicht parseInt zu verwenden, da .data() den Datenwert als JSON analysiert.

+0

gibt es eine überschüssige schließende paranthesis auf den 'return' letzten Teil' 'list-item') ' Sie können auch eine -1 zum Slice-Index hinzufügen, um es auf Listenpunkt 3 zu starten, wegen der Null- Basisindex des Scheibenanfangs –

+1

Ich bin mir nicht einmal sicher, warum er 'data-number' dafür verwendet, er könnte einfach' .index() 'verwenden. – Barmar

+0

@Baramar ja ich möchte Index verwenden, können Sie mir wie zeigen? –

1

$("#itemContainer li").each(function() {//iterate through each li 
 
    
 
    if ($(this).css('display') == 'list-item') {//check the display 
 
    var first = parseInt($("#itemContainer li").first().data("number"), 10); 
 
    var last = parseInt($("#itemContainer li").last().data("number"), 10); 
 
     
 
     console.log(first+ " " + last)//log first and last 
 
    $("#itemContainer li").hide().slice(first, last).show(); 
 
    } 
 

 

 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="itemContainer"> 
 
    <li data-number="1" style="display: none;"></li> 
 
    <li data-number="2" style="display: none;"></li> 
 
    <li data-number="3" style="display: list-item;"></li> 
 
    <li data-number="4" style="display: list-item;"></li> 
 
    <li data-number="5" style="display: list-item;"></li> 
 
</ul>

Tun Sie dies

+0

danke, wie zähle ich auch den listenpunkt im dom? –

+0

$ ('ul li'). Length – guradio

+0

Der Code um zu überprüfen, ob das Display list-item ist korrekt, aber es wird immer noch die li mit 'display: none' auswählen, da Sie immer noch versuchen, ein ungefiltertes Listenelement aufzurufen' $ ("# itemContainer li") ' –

Verwandte Themen