2010-07-12 87 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+项)列表的较新浏览器上缓慢进行。