2011-09-02 13 views
0

我有一個關於排序html元素的策略的一般問題。以下是先決條件:爲書寫排序html內容的策略

我正在動態構建將寫入HTML文件的內容。該內容被寫入一個字符串,隨後將其保存到html文件的主體中。內容包括UL和李標籤的等級表示的,例如

var mText = "<ul>"; 
mText += "<li class='folder'>folder 1"; 
mText += " <ul>"; 
mText += "  <li class='page'>page 3</li>"; 
mText += "  <li class='page'>page 2</li>"; 
mText += "  <li class='folder'>sub folder 2"; 
mText += "   <ul>"; 
mText += "   <li class='page'>sub page 3</li>"; 
mText += "   <li class='page'>sub page 1</li>"; 
mText += "   </ul>"; 
mText += "  </li>"; 
mText += "  <li class='folder'>sub folder 1"; 
mText += "   <ul>"; 
mText += "   <li class='page'>sub page 5</li>"; 
mText += "   <li class='page'>sub page 4</li>"; 
mText += "   </ul>"; 
mText += "  </li>"; 
mText += " </ul>"; 
mText += "</li>"; 
mText += "</ul>"; 

所以我結束了我想寫的元素的字符串表示((用空格和單獨的行爲清楚起見這裏編碼)如果發現錯別字或其他差異,請考慮僞代碼)。層次結構中可能有更多層次。

現在,我需要按文件夾名稱或文件名稱或兩者進行排序。這個字符串是從一個對象(關聯數組)的層次結構(鏈接列表)中構建的,因此在將該結構轉換爲文本之前進行排序會出現類似的問題......並且我試圖弄清楚在轉換之前是否更容易進行排序到字符串或之後。

我該如何去做這件事?將其轉換爲多維數組,對數組進行排序,然後轉換回字符串表示形式?或者有什麼方法可以對字符串的內容進行排序?

我不是JavaScript的新手,並理解排序 - 這沒有問題 - 但我只是尋找大方向,並感謝您的想法!

回答

0

我肯定會在字符串轉換之前對數組進行排序。性能會好很多,因爲排序對象數組比重新排列字符串內容(特別是非常大的字符串)要輕得多。

也只是作爲一個一邊當你正在做大量的字符串連接操作,你應該使用數組方法:

var mText = new Array(); 
mText.push("<li class='folder'>folder 1"); 
mText.push(" <ul>"); 
mText.push("  <li class='page'>page 3</li>"); 
mText.push("  <li class='page'>page 2</li>"); 
mText.push("  <li class='folder'>sub folder 2"); 
mText.push("   <ul>"); 
mText.push("   <li class='page'>sub page 3</li>"); 
mText.push("   <li class='page'>sub page 1</li>"); 
mText.push("   </ul>"); 
mText.push("  </li>";"); 
mText.push("  <li class='folder'>sub folder 1"); 
mText.push("   <ul>"); 
mText.push("   <li class='page'>sub page 5</li>"); 
mText.push("   <li class='page'>sub page 4</li>"); 
mText.push("   </ul>"); 
mText.push("  </li>"); 
mText.push(" </ul>"); 
mText.push("</li>"); 
mText.push("</ul>"); 

//this will create the final string 
return mText.join(""); 

這將是比在大多數情況下,「+ =」方法快得多。

+0

你錯過了我的筆記:這是僞代碼只爲了清晰!除此之外,沒有辦法對JavaScript對象進行排序,所以我必須將對象轉換爲數組,但是從已創建的對象的鏈表創建文本更方便,所以我認爲最終會更方便在事實之後排序。在我的上下文中,性能不是問題。 – Gordon

+0

您可能想結帳:http://www.latentmotion.com/how-to-sort-an-associative-array-object-in-javascript/。它有一個排序關聯數組的方法。 – Adrian

+0

當然,你可以排序對象數組,但我最初構建的表示不是對象數組,它是在對象屬性('關聯數組')中 - 它是表示文件樹的對象鏈表。由於頁面和文件夾數據給我的方式,我沒有使用數組來構建樹,所以我必須做很多交叉引用來遞歸地構造樹表示。使用對象屬性使交叉引用一個快速使用數組將是一件大事。 – Gordon

0

您可以使用DOM方法,如document.CreateElement而不是手動創建字符串嗎?我認爲這樣會更容易分類。

+0

在DOM創建方法上使用字符串連接的唯一真正原因是性能。通常,在字符串中構建標記將比構建要插入頁面的DOM樹更快。兩者都有效只是具有不同的性能特徵。 – Adrian

+0

是的,我想過,但這些不是開始的DOM元素 - 他們被從頁面和文件夾名稱(包括他們的關係)的數據庫中拉出,所以我把它們作爲文本,構建一個鏈表(樹) JavaScript數據表示形式,然後從那裏構建HTML的文本表示形式... – Gordon

+0

我想我可以使用jQuery將文本sting添加到html元素,然後進行排序,然後將結果返回到字符串中。 。? – Gordon