2015-05-21 50 views
0

現在在我的代碼中,我有一個表是動態的,然後用戶輸入一些數據到表中的字段。之後,我想向用戶展示基於該字段對列表進行排序的機會。我想要做的就是使用document.getElementsByClassName來獲取所有的值字段,然後對它們進行排序,但保持對象數據如此。排序document.getElementsByClassName

var posts = document.getElementsByClassName('data'); 
posts.values.sort(); // I'd like to sort the array by the value of the html objects 
for(i=0;i<posts.length;i++){ 
    //modify table order 
} 

回答

1

假設上posts陣列的所有元素是具有value屬性輸入控件,你可以簡單地做

var arr = Array.prototype.slice.call(document.getElementsByClassName('data')); 
arr.sort(function(a, b) { 
    if (a.value < b.value) { 
     return -1; 
    } 

    if (a.value > b.value) { 
     return 1; 
    } 

    return 0; 
}); 

甚至更​​好(感謝@Phil)

arr.sort(function(a, b) { 
    return a.value.localeCompare(b.value); 
}); 

要考慮到我正在按字母排序。隨意做多appropiated爲您的方案比較

+1

AFAIK你不能用'sort'直接在DOM集合,你不需要先將它轉換爲數組嗎? –

+0

@Rob M .:你可能是對的,我不太習慣'getElementsByClassName',並假定它返回一個數組。感謝您的反饋 –

+0

@RobM。是對的。你可以使用'Array.prototype.sort.call(posts,function ...)'。此外,'返回a.value.localeCompare(b.value)'是一個簡單的單行 – Phil

1

document.getElementsByClassName會給你一個的HTMLCollection對象但不是一個陣列,和的HTMLCollection對象沒有排序的方法

所以,你應該改變它到數組中。

var posts = document.getElementsByClassName('data') , arr = []; 
for(var i = 0 ; i < posts.length; i++){ 
    arr.push(posts[i]) 
} 
arr.sort() 
+0

當我將節點打開時,將存儲什麼樣的數據?只是對象的名稱和數據? – Tyler

+0

您存儲的數據將與節點相同。 – Shiyou

相關問題