最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Get last div with the same data- attribute - Stack Overflow

programmeradmin1浏览0评论

How can I select the last div from div groups with the same data-id? I tried to use .last and get last div with :contains but didn't worked.

HTML:

<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
*<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
*<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>

jQuery:

$(".rentals_reservation").each(function(i, value) {
        var id = $(value).attr("data-id").;
        console.log(id);
    })

How can I select the last div from div groups with the same data-id? I tried to use .last and get last div with :contains but didn't worked.

HTML:

<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
*<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
*<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>

jQuery:

$(".rentals_reservation").each(function(i, value) {
        var id = $(value).attr("data-id").;
        console.log(id);
    })
Share Improve this question asked Oct 30, 2017 at 21:05 FanaleaFanalea 1711 gold badge3 silver badges18 bronze badges 1
  • Do you know which specific data-id you want? or do you need to pick each last div for all data-id s? – Praveen Alluri Commented Oct 30, 2017 at 21:14
Add a ment  | 

6 Answers 6

Reset to default 2

Well you can make a selector and select the elements and select the last one

console.log($('[data-id="' + id + '"]').last())

Just form an object. The data-id is a key and element itself as a value. After loop each item in the object points to the latest element with "such" data-id attribute:

var dataIdsMap = {};
$(".rentals_reservation").each(function(i, value) {
        var id = $(value).attr("data-id").;
        dataIdsMap[id] = $(value);

    })
 console.log(dataIdsMap);

It's not entirely clear from the question, but sounds like you want to select all of the last divs from the ones that have the same data-id. ie the 2 that you have marked with a "*".

You can:

  • get a unique list of IDs
  • loop through to return the elements

snippet below does this and hides the elements (to show it's selected them).

//https://stackoverflow./a/33121880/2181514
var ids = $(".rentals_reservation").map(function() { return $(this).data("id"); }).toArray();
var uniqueids =  [...new Set(ids)]
var lastdivs = $(uniqueids).map(function() { return $("[data-id=" + this + "]").last()[0] });
$(lastdivs).hide();
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3407">Booking id: 3407*</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227*</div>

This logic gets all the ids, reduces them to the unique ones, and finally finds the last element for each id.

var $allReservations = $('.rentals_reservation');

console.log(
$allReservations.map(function getTheIds(){
  return this.getAttribute('data-id');
}).get().reduce(function getTheUniqueIds(collection, element){
  if (collection.indexOf(element) < 0) collection.push(element);
  return collection;
}, []).map(function findTheLastElementForEachId(element){
  return $allReservations.filter('[data-id="'+ element +'"]').last();
})
);
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
*<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
*<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>

To optimize your selection I think an array can help, please check the following demo, in which I start to store a unique value of each id in an array and then select the last div with the same id:

var existingIds=[];
var selectedElements=[];
$(".rentals_reservation").each(function(i, value) {
        
         if( !existingIds.includes($(value).data("id")) )
         {
           existingIds.push($(value).data("id"));
          
           selectedElements.push($(".rentals_reservation[data-id='"+$(value).data("id")+"']:last"));
         }         
    })
    console.log(existingIds);
    $.each(selectedElements,function(index, element){
     console.log($(element).text());
    
    })
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="rentals_reservation" data-id="3407">1.Booking id: 3407</div>
<div class="rentals_reservation" data-id="3407">2.Booking id: 3407</div>
<div class="rentals_reservation" data-id="3407">3.Booking id: 3407</div>
<div class="rentals_reservation" data-id="3227">1.Booking id: 3227</div>
<div class="rentals_reservation" data-id="3227">2.Booking id: 3227</div>
<div class="rentals_reservation" data-id="3227">3.Booking id: 3227</div>

Try It. It may help you;

var last = $(".rentals_reservation").last().data("id");
var values = [];
$(".rentals_reservation").each(function(i, v){
  if($(this).data("id") === last){
    values.push($(this).data("id"));
  }
})

console.log(values);
#result{
  color: #F00;
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
*<div class="rentals_reservation" data-id="3407">Booking id: 3407</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
<div class="rentals_reservation" data-id="3227">Booking id: 3227</div>
*<div class="rentals_reservation" data-id="3227">Last One Booking id: 3227</div>

<br /><br />
<div id="result"></div>

发布评论

评论列表(0)

  1. 暂无评论