2010-07-12 64 views
4

我確定有一個簡單的答案,但我找不到它。JavaScript對象內的字符串連接

我知道如何在JavaScript中連接一個普通的字符串,但是如何在一個對象中做到這一點?

我需要這個,因爲我正在閱讀XML文件併爲鏈接列表創建HTML。每次我經過循環時,我都想創建一個包含鏈接的新<li>。如何獲取字符串的當前值,然後在最後附加新鏈接?一旦閱讀完XML,我會將HTML附加到頁面上。

我已經試過:

carParks.links = carParks.links + "<li><a href=\"#\">car park</a></li>"; 

沒有成功。

任何幫助,非常感謝。

+1

就字符串連接語法而言,你所擁有的就沒有問題。你的問題可能存在於其他地方(例如,使用carParks對象本身或調用代碼等)。 – 2010-07-12 13:47:12

+0

我認爲你的權利。我剛剛製作了一個簡化的測試腳本,它使用相同的代碼並且正在工作。問題一定在其他地方。謝謝。 – 2010-07-12 13:58:00

回答

3

帶對象屬性的字符串串聯與其他任何東西都是一樣的。理論上你在那裏的代碼應該工作,只要carParks.links是一個可寫屬性。當您使用++=運算符執行字符串連接時,除了將它們用作算術運算符時,操作數將轉換爲字符串。例如:

var carParks = {}; 
carParks.links = carParks.links + "Test"; 
// -> "undefinedTest", because carParks.links was undefined 

如果您收到錯誤消息,則檢查carParks被定義,並且與可寫特性的JavaScript對象(例如不包括外部接口的一部分)。如果你沒有得到任何錯誤,請確保carParks.links不是一個數字。如果這沒有幫助,請張貼更多的周邊代碼,我會再試一次。

+0

謝謝安迪,我現在意識到語法是正確的,但我後來在代碼中覆蓋了該特定屬性。 – 2010-07-13 09:38:21

0

如果您生成鏈接的噸位也許嘗試/ w array.join();比重複字符串連接

或者,如果您創建一個HTML的DocumentFragment和瀏覽器做CONCAT你...當一個DocumentFragment的附加,只是ducument片段cildNodes什麼更快

var tmp = []; 

for ([iterate over xml]) { 
    tmp.push("<li><a href=\"#\">car park</a></li>"); 
} 

carParks.links = tmp.join(''); 

追加到具體元件。和佈局計算一次,不喜歡每個元素追加,而不必關心字符串連接的執行時間......

var docFrag = document.createDocumentFragment(); 
for ([iterate over xml]) { 
    var current = document.createElement('li'); 
    current.innerHTML = "<a href=\"#\">car park</a>"; 
    docFrag.appendChild(current); 
} 

theElementToAppendMyList.appendChild(docFrag); 
-1

您應該創建一個UL對象,並使用appendChild方法是每個LI你想要

0

這是基本的字符串連接,但根據您的性能考慮,您可能想要完成此操作的方式有所不同;基本上歸結爲使用語言給出的字符串連接運算符或數組連接。前者很簡單,但在較舊的瀏覽器上很慢,而後者更快。

在你的例子中,你使用字符串連接就好了。另一種方法是使用+=操作:

carParks.links = carParks.links + "<li><a href=\"#\">car park</a></li>"; 

的陣列連接方法如下所示:

var buffer = []; 
while(node != null) { 
    buffer.push("<li><a href=\"#\">car park</a></li>"); 
} 
carParks.links = buffer.join(''); 

的陣列連接方法產生更少的垃圾,但我已經看到了運行更多在具有大(10,000+項)列表的較新瀏覽器上緩慢進行。