Вот ответ без массива, как попросил @natiole в комментарии.
function sortList(sortDirection) {
let list = $('.bdcontainer')
list.sort((a, b) => {
if ($(a).find('.bdshowoffer').text() < $(b).find('.bdshowoffer').text()) {
return -1 * sortDirection
}
if ($(a).find('.bdshowoffer').text() > $(b).find('.bdshowoffer').text()) {
return 1 * sortDirection
}
return 0
})
return list
}
function renderList(list, container) {
let htmlString = ''
// jQuery .each()
list.each((i, el) => {
htmlString += $(el).prop('outerHTML')
})
container
.empty()
.append(htmlString)
}
jQuery(document).ready(function($) {
$('#offerdown').on('click', function(e) {
renderList(sortList(1), $('#allbdcontainer'))
})
$('#offerup').on('click', function(e) {
renderList(sortList(-1), $('#allbdcontainer'))
})
})
.bdshowfromdate,
.seperator,
.bdshowtodate,
.bdshowoffer {
float: left;
line-height: 30px;
margin-right: 68px;
}
.bdcontainer {
width: 500px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sortcon">
<button id="offerdown">
sortofferup
</button>
<button id="offerup">
sortofferdown
</button>
<div id="allbdcontainer">
<div class="bdcontainer">
<div class="clear">
</div>
<div class="bdshowfromdate">01.11.2018
</div>
<div class="seperator">-
</div>
<div class="bdshowtodate">31.12.2025
</div>
<div class="bdshowoffer">P3
</div>
</div>
<div class="bdcontainer">
<div class="clear">
</div>
<div class="bdshowfromdate">01.11.2018
</div>
<div class="seperator">-
</div>
<div class="bdshowtodate">31.12.2019
</div>
<div class="bdshowoffer">P1D
</div>
</div>
<div class="bdcontainer">
<div class="clear">
</div>
<div class="bdshowfromdate">15.10.2018
</div>
<div class="seperator">-
</div>
<div class="bdshowtodate">20.10.2018
</div>
<div class="bdshowoffer">P2V
</div>
</div>
<div class="bdcontainer">
<div class="clear">
</div>
<div class="bdshowfromdate">15.10.2018
</div>
<div class="seperator">-
</div>
<div class="bdshowtodate">28.10.2018
</div>
<div class="bdshowoffer">P2V
</div>
</div>
<div class="bdcontainer">
<div class="clear">
</div>
<div class="bdshowfromdate">07.08.2019
</div>
<div class="seperator">-
</div>
<div class="bdshowtodate">04.09.2019
</div>
<div class="bdshowoffer">P1D
</div>
</div>
<div class="bdcontainer">
<div class="clear">
</div>
<div class="bdshowfromdate">22.03.2020
</div>
<div class="seperator">-
</div>
<div class="bdshowtodate">25.03.2020
</div>
<div class="bdshowoffer">P2I
</div>
</div>
</div>
Это правильное решение, но я думаю, что предыдущее лучше (например, обработка массивов в JS быстрее, меньше зависит от jQuery и т. Д.).).