我有一个关于排序html元素的策略的一般性问题。这是先决条件:
我正在动态构建将写入HTML文件的内容。此内容将写入一个字符串,该字符串随后将保存到html文件的正文中。例如,内容由ul和li标签的分层表示组成(为了清楚起见,这里用空格和单独的行编码)
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 :(得分: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("");
在大多数情况下,这比“+ =”方法要快得多。
答案 1 :(得分:0)
你可以使用document.CreateElement
之类的DOM方法而不是手动创建字符串吗?我认为这样可以更容易排序。