2010-07-12 3 views
4

Я уверен, что есть простой ответ на этот вопрос, но я не смог его найти.Конкатенация строк в объекте javascript

Я знаю, как конкатенировать нормальную строку в JavaScript, но как я могу сделать это внутри объекта?

Мне нужно это, когда я читаю XML-файл и создаю HTML-список ссылок. Каждый раз, когда я просматриваю цикл, я хочу создать новый <li>, содержащий ссылку. Как получить текущее значение строки, а затем добавить новую ссылку в конец? Когда я прочитаю XML, я добавлю HTML на страницу.

Я пробовал:

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

без успеха.

Любая помощь очень ценится.

+1

То, что у вас есть, в том, что касается синтаксиса строковой конкатенации. Ваша проблема может быть в другом месте (например, с самим объектом «carParks» или кодом вызова и т. Д.). –

+0

Я думаю, ваше право. Я только что сделал упрощенный тестовый скрипт с тем же кодом, и он работает. Проблема должна быть где-то в другом месте. Благодарю. –

ответ

3

Конкатенация строк с объектным свойством - это то же самое, что и все остальное. Теоретически код, который у вас там, должен работать, если carParks.linksявляется недвижимым имуществом. Когда вы выполняете конкатенацию строк с помощью операторов + или +=, за исключением случаев использования их в качестве арифметических операторов, операнды преобразуются в строки. Например:

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

Если вы получаете сообщение об ошибке, проверьте, что carParks определена и является объектом JavaScript с перезаписываемых свойствами (например, не является частью внешнего интерфейса). Если вы не ошиблись, убедитесь, что carParks.links не является числом. Если это не поможет, отправьте немного больше окружающего кода, и я сделаю еще один снимок.

+0

Спасибо, Энди, теперь я понимаю, что синтаксис верен, но позже я переписывал это конкретное свойство в коде. –

0

Если вы создаете тонны ссылок, возможно, попробуйте/w array.join();

var tmp = []; 

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

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

быстрее, чем неоднократного строки Concat

Или что, если вы создаете HTML DocumentFragment и браузер сделать CONCAT для вас ... Когда DocumentFragment дописано, только фрагмента cildNodes ducument присоединяет к бетону элемент. И расположение рассчитывается один раз, а не как на элемент Append, и вы не должны заботиться о струна Concat время выполнения ...

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 вас want

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 элементов) списками.