我想知道这是否可能。我在下面有一些代码:
<p class="page_classList">
<strong>Crops:</strong>
<br>
<span class="cropElem">Berries - Blueberries</span>
<span class="cropElem">Peas</span>
<span class="cropElem">Squash</span>
<span class="cropElem">Okra</span>
</p>
有没有办法让这些跨度按字母顺序(按裁剪)显示自己。当用户单击在 wordpress 中内置的农场页面时,将显示此列表。脚本可以在页面加载时重新排列这些内容吗?
任何帮助都会很棒!
循环遍历并找到所有裁剪元素,删除该元素并将裁剪名称保存到列表中。对列表进行排序,然后遍历列表并将每个元素重新添加到<p>
这次它们将按字母顺序排列,因为列表是按字母顺序排序的
.sort()
小提琴:https://jsfiddle.net/d7wug6d8/
var spans = $(".page_classList").find(".cropElem");
var cropNames = [];
spans.each(function(index) {
$(spans[index]).remove();
cropNames.push($(spans[index]).html());
});
cropNames.sort();
$(cropNames).each(function(index) {
$(".page_classList").append('<span class="cropElem">' + cropNames[index] + '</span>n');
});
这给出了最终的 HTML:
<p class="page_classList">
<strong>Crops:</strong>
<br>
<span class="cropElem">Berries - Blueberries</span>
<span class="cropElem">Okra</span>
<span class="cropElem">Peas</span>
<span class="cropElem">Squash</span>
</p>
对于您要求的新 HTML:小提琴:https://jsfiddle.net/d7wug6d8/1/
var foodItems = $(".page_classList").html().split(",");
foodItems.sort();
$(".page_classList").html(foodItems.join(", "));
如果您已经在元素上设置了事件,您可能不希望重新创建它们,而是重新排序它们。以下是我将如何做到这一点:
var container = $('.page_classList'),
data = $('.cropElem');
data.sort(function(a,b){
if($(a).html() > $(b).html()) return 1;
if($(a).html() < $(b).html()) return -1;
return 0;
});
for(var i=0; i<data.length; i++) {
container.append(data[i]);
}
.cropElem{ display: block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="page_classList">
<strong>Crops:</strong>
<br>
<span class="cropElem">Berries - Blueberries</span>
<span class="cropElem">Peas</span>
<span class="cropElem">Squash</span>
<span class="cropElem">Okra</span>
</p>
为什么要使用
append
?当你对一个元素进行
append
时,它不会复制它,而是移动它。这允许您对元素重新排序。
这基本上就是你会做的,不过我不想完成代码。 然后,您可以遍历 cropArray 并将其输出到 html span 元素之间。
var cropArray = ["Berries - Blueberries", "Peas", "Squash", "Okra"];
cropArray.sort();
或者简单地:
获取spans
集合,对它们进行排序,然后重新附加新排序的集合。
var els = $('.cropElem');
els.sort(function (a, b) {
a = $(a).text();
b = $(b).text();
// compare
if(a > b) {
return 1;
} else if (a < b) {
return -1;
}
return 0;
});
$('.page_classList').append(els);
span { display: block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="page_classList">
<strong>Crops:</strong>
<br>
<span class="cropElem">Berries - Blueberries</span>
<span class="cropElem">Peas</span>
<span class="cropElem">Squash</span>
<span class="cropElem">Okra</span>
</p>