Решение, которое вы связали, использует jQuery для выбора div
s, тогда как в вашем случае cards
, являющийся результатом собственного вызова querySelector
, не имеет методов eq
и before
.
Может ли это быть решено с помощью dom-repeat
?
Да: вы можете сохранить модель данных за div в свойстве и перетасовать его перед рендерингом div:
<dom-module id="my-view">
<template>
<!-- Render the divs using dom-repeat -->
<template is="dom-repeat" items="[[divs]]">
<div>{{item.name}}</div>
</template>
</template>
<script>
class MyView extends Polymer.Element {
static get is() { return 'my-view'; }
static get properties() {
return {
divs: {
type: Array,
value: [],
}
};
}
// In connectedCallback you can initialise the divs property
// by shuffling the initial ordered array using the Fisher-Yates algorithm
// /1866992/kak-randomizirovat-peremeshat-massiv-javascript
connectedCallback() {
super.connectedCallback();
let array = [ // The ordered model behind the divs
{ name: 'Div #1' },
{ name: 'Div #2' },
{ name: 'Div #3' },
{ name: 'Div #4' },
{ name: 'Div #5' },
];
let currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
this.divs = array;
}
}
window.customElements.define(MyView.is, MyView);
</script>
</dom-module>