JavaScript divを子値(スパンの内容)にソートする必要があります。子要素に基づくJSソート親要素
私はすでにここに、このスレッドではJavaScriptのソートalgorthmが見つかりました: Easiest way to sort DOM nodes?
それだけの単純なリストですが。私は段落要素を見ない変更されたバージョンを持っていたい。
HTML
<div class="myclass">
<p class="hide">1</p>
<span>2</span>
</div>
<div class="myclass">
<p class="hide">2</p>
<span>1</span>
</div>
<div class="myclass">
<p class="hide">3</p>
<span>4</span>
</div>
<div class="myclass">
<p class="hide">4</p>
<span>1</span>
</div>
JS
var list = document.getElementById('sortme');
var items = list.childNodes;
var itemsArr = [];
for (var i in items) {
// HERE I need to get to the SPAN Element but how?
if (items[i].nodeType == 1) { // get rid of the whitespace text nodes
itemsArr.push(items[i]);
}
}
itemsArr.sort(function(a, b) {
return a.innerHTML == b.innerHTML
? 0
: (a.innerHTML > b.innerHTML ? 1 : -1);
});
for (i = 0; i < itemsArr.length; ++i) {
list.appendChild(itemsArr[i]);
}
ここJSFiddleです。あなたが気づいたように、いくつかの変更がここにあります
var list = document.getElementById('sortme');
var nodesToSort = list.querySelectorAll('.myclass');
Array.prototype.map.call(nodesToSort, function(node) {
return {
node: node,
relevantText: node.querySelector('span').textContent
};
}).sort(function(a, b) {
return a.relevantText.localeCompare(b.relevantText);
}).forEach(function(item) {
list.appendChild(item.node);
});
:
DOM構造をマークアップとして表示してください。 – Bergi
実際には、あなたのケースでは、項目が再配置されるための確かな基準 - classNameがあるので、さらに簡単です。したがって、1) 'list.childNodes'呼び出しを' list.querySelectorAll(myclass ') 'に置き換え、2)' b.querySelector(' span ')に対して 'a.querySelector(' span ')。innerHTML'をチェックしてください。代わりにinnerHTML'を使用してください(これはもっとうまくいくかもしれません)。 – raina77ow